haiku/src/servers/midi/MidiServerApp.h

100 lines
2.5 KiB
C++

/*
* Copyright 2002-2015, Haiku, Inc. All rights reserved.
* Distributed under the terms of the MIT License.
*
* Authors:
* Matthijs Hollemans
*/
#ifndef MIDI_SERVER_APP_H
#define MIDI_SERVER_APP_H
#include <Server.h>
#include <List.h>
#include "DeviceWatcher.h"
struct app_t;
struct endpoint_t;
/*! The heart of the midi_server. This BApplication subclass
keeps the roster of endpoints and applications, processes
incoming messages from libmidi2.so, and notifies the apps
when something interesting happens.
*/
class MidiServerApp : public BServer {
public:
MidiServerApp(status_t& error);
virtual ~MidiServerApp();
virtual void AboutRequested();
virtual void MessageReceived(BMessage* msg);
private:
typedef BServer super;
void _OnRegisterApp(BMessage* msg);
void _OnCreateEndpoint(BMessage* msg);
void _OnDeleteEndpoint(BMessage* msg);
void _OnPurgeEndpoint(BMessage* msg);
void _OnChangeEndpoint(BMessage* msg);
void _OnConnectDisconnect(BMessage* msg);
bool _SendAllEndpoints(app_t* app);
bool _SendAllConnections(app_t* app);
void _AddEndpoint(BMessage* msg, endpoint_t* endp);
void _RemoveEndpoint(app_t* app, endpoint_t* endp);
void _DisconnectDeadConsumer(endpoint_t* cons);
void _MakeCreatedNotification(BMessage* msg,
endpoint_t* endp);
void _MakeConnectedNotification(BMessage* msg,
endpoint_t* prod, endpoint_t* cons,
bool mustConnect);
app_t* _WhichApp(BMessage* msg);
endpoint_t* _WhichEndpoint(BMessage* msg, app_t* app);
endpoint_t* _FindEndpoint(int32 id);
void _NotifyAll(BMessage* msg, app_t* except);
bool _SendNotification(app_t* app, BMessage* msg);
bool _SendReply(app_t* app, BMessage* msg,
BMessage* reply);
void _DeliveryError(app_t* app);
int32 _CountApps();
app_t* _AppAt(int32 index);
int32 _CountEndpoints();
endpoint_t* _EndpointAt(int32 index);
int32 _CountConnections(endpoint_t* prod);
endpoint_t* _ConnectionAt(endpoint_t* prod, int32 index);
#ifdef DEBUG
void _DumpApps();
void _DumpEndpoints();
#endif
private:
//! The registered applications.
BList fApps;
//! All the endpoints in the system.
BList fEndpoints;
//! The ID we will assign to the next new endpoint.
int32 fNextID;
//! Watch endpoints from /dev/midi drivers.
DeviceWatcher* fDeviceWatcher;
};
#endif // MIDI_SERVER_APP_H