00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef __JackNetInterface__
00022 #define __JackNetInterface__
00023
00024 #include "JackNetTool.h"
00025
00026 namespace Jack
00027 {
00032 class SERVER_EXPORT JackNetInterface
00033 {
00034 protected:
00035 session_params_t fParams;
00036 JackNetSocket fSocket;
00037 char* fMulticastIP;
00038 uint fNSubProcess;
00039
00040
00041 packet_header_t fTxHeader;
00042 packet_header_t fRxHeader;
00043
00044
00045 char* fTxBuffer;
00046 char* fRxBuffer;
00047 char* fTxData;
00048 char* fRxData;
00049
00050
00051 NetMidiBuffer* fNetMidiCaptureBuffer;
00052 NetMidiBuffer* fNetMidiPlaybackBuffer;
00053 NetAudioBuffer* fNetAudioCaptureBuffer;
00054 NetAudioBuffer* fNetAudioPlaybackBuffer;
00055
00056
00057 int fAudioRxLen;
00058 int fAudioTxLen;
00059 int fPayloadSize;
00060
00061
00062 jack_nframes_t SetFramesPerPacket();
00063 int SetNetBufferSize();
00064 int GetNMidiPckt();
00065 bool IsNextPacket();
00066
00067
00068 virtual void SetParams();
00069 virtual bool Init() = 0;
00070
00071
00072 virtual int EncodeTransportData() = 0;
00073 virtual int DecodeTransportData() = 0;
00074
00075
00076 virtual int EncodeSyncPacket() = 0;
00077 virtual int DecodeSyncPacket() = 0;
00078
00079 virtual int SyncRecv() = 0;
00080 virtual int SyncSend() = 0;
00081 virtual int DataRecv() = 0;
00082 virtual int DataSend() = 0;
00083
00084 virtual int Send ( size_t size, int flags ) = 0;
00085 virtual int Recv ( size_t size, int flags ) = 0;
00086
00087 JackNetInterface();
00088 JackNetInterface ( const char* multicast_ip, int port );
00089 JackNetInterface ( session_params_t& params, JackNetSocket& socket, const char* multicast_ip );
00090
00091 public:
00092 virtual ~JackNetInterface();
00093 };
00094
00099 class SERVER_EXPORT JackNetMasterInterface : public JackNetInterface
00100 {
00101 protected:
00102 bool fRunning;
00103
00104 bool Init();
00105 int SetRxTimeout();
00106 void SetParams();
00107 void Exit();
00108 int SyncRecv();
00109 int SyncSend();
00110 int DataRecv();
00111 int DataSend();
00112
00113 int Send ( size_t size, int flags );
00114 int Recv ( size_t size, int flags );
00115
00116 public:
00117 JackNetMasterInterface() : JackNetInterface(), fRunning ( false )
00118 {}
00119 JackNetMasterInterface ( session_params_t& params, JackNetSocket& socket, const char* multicast_ip )
00120 : JackNetInterface ( params, socket, multicast_ip )
00121 {}
00122 ~JackNetMasterInterface()
00123 {}
00124 };
00125
00130 class SERVER_EXPORT JackNetSlaveInterface : public JackNetInterface
00131 {
00132 protected:
00133 static uint fSlaveCounter;
00134
00135 bool Init();
00136 net_status_t GetNetMaster();
00137 net_status_t SendStartToMaster();
00138 void SetParams();
00139 int SyncRecv();
00140 int SyncSend();
00141 int DataRecv();
00142 int DataSend();
00143
00144 int Recv ( size_t size, int flags );
00145 int Send ( size_t size, int flags );
00146
00147 public:
00148 JackNetSlaveInterface() : JackNetInterface()
00149 {
00150
00151 if ( fSlaveCounter++ == 0 )
00152 {
00153 if ( SocketAPIInit() < 0 )
00154 {
00155 jack_error ( "Can't init Socket API, exiting..." );
00156 throw -1;
00157 }
00158 }
00159 }
00160 JackNetSlaveInterface ( const char* ip, int port ) : JackNetInterface ( ip, port )
00161 {
00162
00163 if ( fSlaveCounter++ == 0 )
00164 {
00165 if ( SocketAPIInit() < 0 )
00166 {
00167 jack_error ( "Can't init Socket API, exiting..." );
00168 throw -1;
00169 }
00170 }
00171 }
00172 ~JackNetSlaveInterface()
00173 {
00174
00175 if ( --fSlaveCounter == 0 )
00176 SocketAPIEnd();
00177 }
00178 };
00179 }
00180
00181 #define DEFAULT_MULTICAST_IP "225.3.19.154"
00182 #define DEFAULT_PORT 19000
00183
00184 #define SLAVE_SETUP_RETRY 5
00185
00186 #define MASTER_INIT_TIMEOUT 1000000 // in usec
00187 #define SLAVE_INIT_TIMEOUT 2000000 // in usec
00188
00189 #endif