00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef __JACKNETMANAGER_H__
00021 #define __JACKNETMANAGER_H__
00022
00023 #include "JackNetInterface.h"
00024 #include "thread.h"
00025 #include "jack.h"
00026 #include "jslist.h"
00027 #include <list>
00028
00029 namespace Jack
00030 {
00031 class JackNetMasterManager;
00032
00037 class JackNetMaster : public JackNetMasterInterface
00038 {
00039 friend class JackNetMasterManager;
00040 private:
00041 static int SetProcess ( jack_nframes_t nframes, void* arg );
00042 static void SetTimebaseCallback ( jack_transport_state_t state, jack_nframes_t nframes, jack_position_t* pos, int new_pos, void* arg );
00043
00044
00045 jack_client_t* fJackClient;
00046 const char* fClientName;
00047
00048
00049 jack_port_t** fAudioCapturePorts;
00050 jack_port_t** fAudioPlaybackPorts;
00051 jack_port_t** fMidiCapturePorts;
00052 jack_port_t** fMidiPlaybackPorts;
00053
00054
00055 int fLastTransportState;
00056
00057
00058 #ifdef JACK_MONITOR
00059 jack_time_t fPeriodUsecs;
00060 JackGnuPlotMonitor<float>* fNetTimeMon;
00061 #endif
00062
00063 bool Init(bool auto_connect);
00064 int AllocPorts();
00065 void FreePorts();
00066 void Exit();
00067
00068
00069 void EncodeTransportData();
00070 void DecodeTransportData();
00071
00072 int Process();
00073 void TimebaseCallback ( jack_position_t* pos );
00074 void ConnectPorts();
00075
00076 public:
00077 JackNetMaster ( JackNetSocket& socket, session_params_t& params, const char* multicast_ip);
00078 ~JackNetMaster ();
00079
00080 bool IsSlaveReadyToRoll();
00081 };
00082
00083 typedef std::list<JackNetMaster*> master_list_t;
00084 typedef master_list_t::iterator master_list_it_t;
00085
00090 class JackNetMasterManager
00091 {
00092 friend class JackNetMaster;
00093 private:
00094 static int SetSyncCallback ( jack_transport_state_t state, jack_position_t* pos, void* arg );
00095 static void* NetManagerThread ( void* arg );
00096
00097 jack_client_t* fManagerClient;
00098 const char* fManagerName;
00099 char fMulticastIP[32];
00100 JackNetSocket fSocket;
00101 pthread_t fManagerThread;
00102 master_list_t fMasterList;
00103 uint32_t fGlobalID;
00104 bool fRunning;
00105 bool fAutoConnect;
00106
00107 void Run();
00108 JackNetMaster* MasterInit ( session_params_t& params );
00109 master_list_it_t FindMaster ( uint32_t client_id );
00110 int KillMaster ( session_params_t* params );
00111 void SetSlaveName ( session_params_t& params );
00112
00113 int SyncCallback ( jack_transport_state_t state, jack_position_t* pos );
00114 public:
00115 JackNetMasterManager ( jack_client_t* jack_client, const JSList* params);
00116 ~JackNetMasterManager();
00117 };
00118 }
00119
00120 #endif