JackNetManager.h 3.49 KB
Newer Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/*
Copyright (C) 2008 Grame

This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.

*/
sletz's avatar
sletz committed
19

20
21
#ifndef __JACKNETMANAGER_H__
#define __JACKNETMANAGER_H__
sletz's avatar
sletz committed
22
23

#include "JackNetTool.h"
24
25
#include "thread.h"
#include "jack.h"
26
#include "jslist.h"
moret's avatar
moret committed
27
#include <list>
sletz's avatar
sletz committed
28
29
30

namespace Jack
{
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
    class JackNetMasterManager;

    class JackNetMaster
    {
        friend class JackNetMasterManager;
    private:
        static int SetProcess ( jack_nframes_t nframes, void* arg );

        JackNetMasterManager* fMasterManager;
        session_params_t fParams;
        JackNetSocket fSocket;
        uint fNSubProcess;
        int fNetJumpCnt;
        bool fRunning;

46
		//jack client
47
48
49
        jack_client_t* fJackClient;
        const char* fClientName;

50
		//jack ports
51
52
53
54
55
        jack_port_t** fAudioCapturePorts;
        jack_port_t** fAudioPlaybackPorts;
        jack_port_t** fMidiCapturePorts;
        jack_port_t** fMidiPlaybackPorts;

56
57
58
59
60
		//sync and transport
        int fSyncState;
        net_transport_data_t fTransportData;

		//network headers
61
62
63
        packet_header_t fTxHeader;
        packet_header_t fRxHeader;

64
		//network buffers
65
66
67
68
69
        char* fTxBuffer;
        char* fRxBuffer;
        char* fTxData;
        char* fRxData;

70
		//jack buffers
71
72
73
74
75
        NetAudioBuffer* fNetAudioCaptureBuffer;
        NetAudioBuffer* fNetAudioPlaybackBuffer;
        NetMidiBuffer* fNetMidiCaptureBuffer;
        NetMidiBuffer* fNetMidiPlaybackBuffer;

76
		//sizes
77
78
        int fAudioTxLen;
        int fAudioRxLen;
79
        int fPayloadSize;
80
81
82
83
84

        bool Init();
        void FreePorts();
        void Exit();

85
86
		int SetSyncPacket();

87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
        int Send ( char* buffer, size_t size, int flags );
        int Recv ( size_t size, int flags );
        int Process();
    public:
        JackNetMaster ( JackNetMasterManager* manager, session_params_t& params );
        ~JackNetMaster ();
    };

    typedef std::list<JackNetMaster*> master_list_t;
    typedef master_list_t::iterator master_list_it_t;

    class JackNetMasterManager
    {
        friend class JackNetMaster;
    private:
102
        static int SetSyncCallback ( jack_transport_state_t state, jack_position_t* pos, void* arg );
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
        static void* NetManagerThread ( void* arg );

        jack_client_t* fManagerClient;
        const char* fManagerName;
        const char* fMulticastIP;
        JackNetSocket fSocket;
        pthread_t fManagerThread;
        master_list_t fMasterList;
        uint32_t fGlobalID;
        bool fRunning;

        void Run();
        JackNetMaster* MasterInit ( session_params_t& params );
        master_list_it_t FindMaster ( uint32_t client_id );
        void KillMaster ( session_params_t* params );
        void SetSlaveName ( session_params_t& params );
119
120

        int SyncCallback ( jack_transport_state_t state, jack_position_t* pos );
121
122
123
124
125
126
    public:
        JackNetMasterManager ( jack_client_t* jack_client, const JSList* params );
        ~JackNetMasterManager();

        void Exit();
    };
sletz's avatar
sletz committed
127
128
129
}

#endif