JackNetManager.h 3.16 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
22
23

#ifndef __JACKNETMASTER_H__
#define __JACKNETMASTER_H__

#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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
    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;

        jack_client_t* fJackClient;
        const char* fClientName;

        jack_port_t** fAudioCapturePorts;
        jack_port_t** fAudioPlaybackPorts;
        jack_port_t** fMidiCapturePorts;
        jack_port_t** fMidiPlaybackPorts;

        packet_header_t fTxHeader;
        packet_header_t fRxHeader;

        char* fTxBuffer;
        char* fRxBuffer;
        char* fTxData;
        char* fRxData;

        NetAudioBuffer* fNetAudioCaptureBuffer;
        NetAudioBuffer* fNetAudioPlaybackBuffer;
        NetMidiBuffer* fNetMidiCaptureBuffer;
        NetMidiBuffer* fNetMidiPlaybackBuffer;

        int fAudioTxLen;
        int fAudioRxLen;

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

        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:
        static void* NetManagerThread ( void* arg );
        static int SetProcess ( jack_nframes_t nframes, 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 );
        int Process();
    public:
        JackNetMasterManager ( jack_client_t* jack_client, const JSList* params );
        ~JackNetMasterManager();

        void Exit();
    };
sletz's avatar
sletz committed
113
114
115
}

#endif