JackNetManager.h 3.71 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;

moret's avatar
moret committed
46
        //jack client
47
48
49
        jack_client_t* fJackClient;
        const char* fClientName;

moret's avatar
moret committed
50
        //jack ports
51
52
53
54
55
        jack_port_t** fAudioCapturePorts;
        jack_port_t** fAudioPlaybackPorts;
        jack_port_t** fMidiCapturePorts;
        jack_port_t** fMidiPlaybackPorts;

moret's avatar
moret committed
56
        //sync and transport
57
58
59
        int fSyncState;
        net_transport_data_t fTransportData;

moret's avatar
moret committed
60
        //network headers
61
62
63
        packet_header_t fTxHeader;
        packet_header_t fRxHeader;

moret's avatar
moret committed
64
        //network buffers
65
66
67
68
69
        char* fTxBuffer;
        char* fRxBuffer;
        char* fTxData;
        char* fRxData;

moret's avatar
moret committed
70
        //jack buffers
71
72
73
74
75
        NetAudioBuffer* fNetAudioCaptureBuffer;
        NetAudioBuffer* fNetAudioPlaybackBuffer;
        NetMidiBuffer* fNetMidiCaptureBuffer;
        NetMidiBuffer* fNetMidiPlaybackBuffer;

moret's avatar
moret committed
76
        //sizes
77
78
        int fAudioTxLen;
        int fAudioRxLen;
79
        int fPayloadSize;
80

moret's avatar
moret committed
81
82
83
84
85
86
87
        //monitoring
#ifdef NETMONITOR
		static std::string fMonitorPlotOptions[];
		static std::string fMonitorFieldNames[];
        NetMonitor<jack_nframes_t> fMonitor;
#endif

88
89
90
91
        bool Init();
        void FreePorts();
        void Exit();

moret's avatar
moret committed
92
        int SetSyncPacket();
93

94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
        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:
109
        static int SetSyncCallback ( jack_transport_state_t state, jack_position_t* pos, void* arg );
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
        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 );
126
127

        int SyncCallback ( jack_transport_state_t state, jack_position_t* pos );
128
129
130
131
132
133
    public:
        JackNetMasterManager ( jack_client_t* jack_client, const JSList* params );
        ~JackNetMasterManager();

        void Exit();
    };
sletz's avatar
sletz committed
134
135
136
}

#endif