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[32];
00038 uint fNSubProcess;
00039
00040
00041 packet_header_t fTxHeader;
00042 packet_header_t fRxHeader;
00043
00044
00045 net_transport_data_t fSendTransportData;
00046 net_transport_data_t fReturnTransportData;
00047
00048
00049 char* fTxBuffer;
00050 char* fRxBuffer;
00051 char* fTxData;
00052 char* fRxData;
00053
00054
00055 NetMidiBuffer* fNetMidiCaptureBuffer;
00056 NetMidiBuffer* fNetMidiPlaybackBuffer;
00057 NetAudioBuffer* fNetAudioCaptureBuffer;
00058 NetAudioBuffer* fNetAudioPlaybackBuffer;
00059
00060
00061 int fAudioRxLen;
00062 int fAudioTxLen;
00063 int fPayloadSize;
00064
00065
00066 void SetFramesPerPacket();
00067 int SetNetBufferSize();
00068 int GetNMidiPckt();
00069 bool IsNextPacket();
00070
00071
00072 virtual void SetParams();
00073 virtual bool Init() = 0;
00074
00075
00076 virtual void EncodeTransportData() = 0;
00077 virtual void DecodeTransportData() = 0;
00078
00079
00080 virtual void EncodeSyncPacket() = 0;
00081 virtual void DecodeSyncPacket() = 0;
00082
00083 virtual int SyncRecv() = 0;
00084 virtual int SyncSend() = 0;
00085 virtual int DataRecv() = 0;
00086 virtual int DataSend() = 0;
00087
00088 virtual int Send ( size_t size, int flags ) = 0;
00089 virtual int Recv ( size_t size, int flags ) = 0;
00090
00091 JackNetInterface();
00092 JackNetInterface ( const char* multicast_ip, int port );
00093 JackNetInterface ( session_params_t& params, JackNetSocket& socket, const char* multicast_ip );
00094
00095 public:
00096 virtual ~JackNetInterface();
00097 };
00098
00103 class SERVER_EXPORT JackNetMasterInterface : public JackNetInterface
00104 {
00105 protected:
00106 bool fRunning;
00107 int fCycleOffset;
00108
00109 bool Init();
00110 int SetRxTimeout();
00111 void SetParams();
00112
00113 void Exit();
00114
00115 int SyncRecv();
00116 int SyncSend();
00117
00118 int DataRecv();
00119 int DataSend();
00120
00121
00122 void EncodeSyncPacket();
00123 void DecodeSyncPacket();
00124
00125 int Send ( size_t size, int flags );
00126 int Recv ( size_t size, int flags );
00127
00128 bool IsSynched();
00129
00130 public:
00131 JackNetMasterInterface() : JackNetInterface(), fRunning(false), fCycleOffset(0)
00132 {}
00133 JackNetMasterInterface ( session_params_t& params, JackNetSocket& socket, const char* multicast_ip )
00134 : JackNetInterface ( params, socket, multicast_ip )
00135 {}
00136 ~JackNetMasterInterface()
00137 {}
00138 };
00139
00144 class SERVER_EXPORT JackNetSlaveInterface : public JackNetInterface
00145 {
00146 protected:
00147
00148 static uint fSlaveCounter;
00149
00150 bool Init();
00151 bool InitConnection();
00152 bool InitRendering();
00153
00154 net_status_t SendAvailableToMaster();
00155 net_status_t SendStartToMaster();
00156
00157 void SetParams();
00158
00159 int SyncRecv();
00160 int SyncSend();
00161
00162 int DataRecv();
00163 int DataSend();
00164
00165
00166 void EncodeSyncPacket();
00167 void DecodeSyncPacket();
00168
00169 int Recv ( size_t size, int flags );
00170 int Send ( size_t size, int flags );
00171
00172 public:
00173 JackNetSlaveInterface() : JackNetInterface()
00174 {
00175
00176 if ( fSlaveCounter++ == 0 )
00177 {
00178 if ( SocketAPIInit() < 0 )
00179 {
00180 jack_error ( "Can't init Socket API, exiting..." );
00181 throw -1;
00182 }
00183 }
00184 }
00185 JackNetSlaveInterface ( const char* ip, int port ) : JackNetInterface ( ip, port )
00186 {
00187
00188 if ( fSlaveCounter++ == 0 )
00189 {
00190 if ( SocketAPIInit() < 0 )
00191 {
00192 jack_error ( "Can't init Socket API, exiting..." );
00193 throw -1;
00194 }
00195 }
00196 }
00197 ~JackNetSlaveInterface()
00198 {
00199
00200 if ( --fSlaveCounter == 0 )
00201 SocketAPIEnd();
00202 }
00203 };
00204 }
00205
00206 #define DEFAULT_MULTICAST_IP "225.3.19.154"
00207 #define DEFAULT_PORT 19000
00208 #define DEFAULT_MTU 1500
00209
00210 #define SLAVE_SETUP_RETRY 5
00211
00212 #define MASTER_INIT_TIMEOUT 1000000 // in usec
00213 #define SLAVE_INIT_TIMEOUT 2000000 // in usec
00214
00215 #define MAX_LATENCY 6
00216
00217 #endif