1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101
| //---------------------------------------------------------------------------
// TShaïCameraCustom -
//---------------------------------------------------------------------------
class /*abstract*/ TShaïCameraCustom : public TShaïHardwareProviderAbstractPersistentObject
{
typedef TShaïHardwareProviderAbstractPersistentObject inherited;
friend /*method*/ void __fastcall TShaïCameraCustomManager::EventHandlerPurposeEntityChangeStateEvent(TShaïHardwareProviderManager * Sender, IShaïHardwareEntity* AEntity, int AState, void *Data);
friend /*method*/ void __fastcall TShaïCameraCustomManager::EventHandlerPurposeEntityErrorEvent(TShaïHardwareProviderManager * Sender, IShaïHardwareEntity* AEntity, int AError, void *Data);
private:
// Membres Privés
TShaïCameraStates FCameraStates;
TMultiReadExclusiveWriteSynchronizer *FCameraStatesThreadLock;
TShaïCameraTestConnectionState FTestConnectionState;
TShaïCameraDirectView* FDirectView;
TShaïCameraRecording *FRecording;
bool FForbiddenReload; // Pour éviter que l'on puisse changer de Provider alors des Interfaces se baladent dans la nature
enum TDownloadDirectoryState {ddsNone, ddsSet, ddsNotSupported};
TDownloadDirectoryState FDownloadDirectoryState;
// Méthodes Privées
void InternalCreate(); // all constructors must call InternalCreate
void InternalDestroy(); // all destructors must call InternalDestroy
void InternalCleanPurposeInterfaces();
TShaïCameraTestConnectionState SetTestConnectionStateFromHardwareCameraState(TShaïHardwareCameraState AState, bool AsyncMode);
// Méthodes Privées (Signalement d'Evènement)
void NotifyChangeState(TShaïCameraCustomManager * Sender, TShaïHardwareCameraState AState, void *Data);
void NotifyError(TShaïCameraCustomManager * Sender, TShaïHardwareCameraError AError, void *Data);
protected:
// Méthodes Redéfinies
/*override*/virtual TShaïHardwareProviderManager* __fastcall GetProviderManagerInstance();
/*override*/virtual void CleanPurposeInterfaces();
/*override*/virtual bool AllowLoad();
// Accesseurs (Divers)
TShaïCameraStates __fastcall GetCameraStates();
TShaïCameraDirectView* __fastcall GetDirectView();
TShaïCameraRecording* __fastcall GetRecording();
TFileName __fastcall GetCameraVideoDirectory();
// Accesseurs (Sensor)
bool __fastcall GetSensorAvailable() {/* TODO CAM*/};
// Accesseurs (Propriétés Publiques)
IShaïCameraEntityPurposeDelphiInterface __fastcall GetCameraPurposeInterface();
public:
// Constructeurs Publiques
/*constructor*/__fastcall TShaïCameraCustom();
/*constructor*/__fastcall TShaïCameraCustom(TDataSet* ADataSet);
/*destructor*/__fastcall virtual ~TShaïCameraCustom();
// Méthodes Publiques (Vues)
TShaïCameraDirectView* CreateDirectView(); // Crée un nouvel objet Vue, l'appelant est responsable de la libération, augmente le compteur de référence sur la Camera
bool HasDirectView();
// Méthodes Publiques (Enregistrements)
TShaïCameraRecording* CreateRecording(); // Crée un nouvel objet Enregistrement, l'appelant est responsable de la libération, augmente le compteur de référence sur la Camera
TShaïCameraRecording* CreateRecordingWithContext(TShaïCameraActionRecordingContext *AActionContext);
bool HasRecording();
// Méthodes Publiques (Relecture d'Archive)
TShaïCameraPlaybackView* CreatePlaybackView(); // Crée un nouvel objet Redifusion, l'appelant est responsable de la libération, augmente le compteur de référence sur la Camera
// Méthodes Publiques (Connection)
TShaïCameraTestConnectionState TestConnection();
void TestConnectionTimedOut();
// Méthodes Publiques (Sensor)
bool ActiveSensor(bool Active, bool AsynchronousMode = true)
{/* TODO CAM - AXIS, devra être async avec vérification par Socket avant de tenter un HTTP, ne pas cumuler les demandes via scsSensorActivating, scsSensorDesactivating, scsSensorActive */
/* TODO CAM - Dahua, nécessite une connexion permanente pour l'abonnement au système de message de la motion*/
/* TODO CAM - CamTrace, nécessite une connexion permanente sur le socket de notification*/};
// Propriétés Publiques
__property Provider; // Augmentation de Visibilité
__property Model; // Augmentation de Visibilité
__property Entity; // Augmentation de Visibilité
__property IShaïCameraEntityPurposeDelphiInterface CameraPurposeInterface = {read=GetCameraPurposeInterface};
// Propriétés Publiques
__property TShaïCameraStates CameraStates = {read=GetCameraStates};
__property TFileName CameraVideoDirectory = {read=GetCameraVideoDirectory};
// Propriétés Publiques (Vues)
__property TShaïCameraDirectView* DirectView = {read=GetDirectView}; // Cherche la vue existante, création si nécessaire !
// Propriétés Publiques (Enregistrements)
__property TShaïCameraRecording* Recording = {read=GetRecording}; // Cherche l'enregistreur existant, création si nécessaire !
// Méthodes Publiques (Connection)
__property TShaïCameraTestConnectionState TestConnectionState = {read=FTestConnectionState};
// Propriétés Publiques (Sensor)
__property bool SensorAvailable = {read=GetSensorAvailable};
}; |
Partager