Cleanup thread code.
[jack2.git] / common / JackNetManager.h
blob29c8386d7e618ad1b9448cf16e261798c8a0607b
1 /*
2 Copyright (C) 2008 Grame
4 This program is free software; you can redistribute it and/or modify
5 it under the terms of the GNU General Public License as published by
6 the Free Software Foundation; either version 2 of the License, or
7 (at your option) any later version.
9 This program is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 GNU General Public License for more details.
14 You should have received a copy of the GNU General Public License
15 along with this program; if not, write to the Free Software
16 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
20 #ifndef __JACKNETMANAGER_H__
21 #define __JACKNETMANAGER_H__
23 #include "JackNetInterface.h"
24 #include "thread.h"
25 #include "jack.h"
26 #include "jslist.h"
27 #include <list>
29 namespace Jack
31 class JackNetMasterManager;
33 /**
34 \Brief This class describes a Net Master
37 class JackNetMaster : public JackNetMasterInterface
39 friend class JackNetMasterManager;
40 private:
41 static int SetProcess ( jack_nframes_t nframes, void* arg );
42 static int SetBufferSize (jack_nframes_t nframes, void* arg);
43 static void SetTimebaseCallback ( jack_transport_state_t state, jack_nframes_t nframes, jack_position_t* pos, int new_pos, void* arg );
45 //jack client
46 jack_client_t* fJackClient;
47 const char* fClientName;
49 //jack ports
50 jack_port_t** fAudioCapturePorts;
51 jack_port_t** fAudioPlaybackPorts;
52 jack_port_t** fMidiCapturePorts;
53 jack_port_t** fMidiPlaybackPorts;
55 //sync and transport
56 int fLastTransportState;
58 //monitoring
59 #ifdef JACK_MONITOR
60 jack_time_t fPeriodUsecs;
61 JackGnuPlotMonitor<float>* fNetTimeMon;
62 #endif
64 bool Init(bool auto_connect);
65 int AllocPorts();
66 void FreePorts();
68 //transport
69 void EncodeTransportData();
70 void DecodeTransportData();
72 int Process();
73 void TimebaseCallback ( jack_position_t* pos );
74 void ConnectPorts();
76 public:
77 JackNetMaster ( JackNetSocket& socket, session_params_t& params, const char* multicast_ip);
78 ~JackNetMaster ();
80 bool IsSlaveReadyToRoll();
83 typedef std::list<JackNetMaster*> master_list_t;
84 typedef master_list_t::iterator master_list_it_t;
86 /**
87 \Brief This class describer the Network Manager
90 class JackNetMasterManager
92 friend class JackNetMaster;
93 private:
94 static int SetSyncCallback ( jack_transport_state_t state, jack_position_t* pos, void* arg );
95 static void* NetManagerThread ( void* arg );
97 jack_client_t* fManagerClient;
98 const char* fManagerName;
99 char fMulticastIP[32];
100 JackNetSocket fSocket;
101 pthread_t fManagerThread;
102 master_list_t fMasterList;
103 uint32_t fGlobalID;
104 bool fRunning;
105 bool fAutoConnect;
107 void Run();
108 JackNetMaster* InitMaster ( session_params_t& params );
109 master_list_it_t FindMaster ( uint32_t client_id );
110 int KillMaster ( session_params_t* params );
111 void SetSlaveName ( session_params_t& params );
113 int SyncCallback ( jack_transport_state_t state, jack_position_t* pos );
114 public:
115 JackNetMasterManager ( jack_client_t* jack_client, const JSList* params);
116 ~JackNetMasterManager();
120 #endif