Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mumble-voip/mumble.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xscripts/testcallback.py43
-rw-r--r--src/Message.cpp46
-rw-r--r--src/Message.h33
-rw-r--r--src/murmur/Messages.cpp13
-rw-r--r--src/murmur/Murmur.ice39
-rw-r--r--src/murmur/MurmurI.h3
-rw-r--r--src/murmur/MurmurIce.cpp106
-rw-r--r--src/murmur/MurmurIce.h3
-rw-r--r--src/murmur/MurmurIceWrapper.cpp8
-rw-r--r--src/murmur/Server.h4
10 files changed, 269 insertions, 29 deletions
diff --git a/scripts/testcallback.py b/scripts/testcallback.py
index 8755e6124..6b88756ff 100755
--- a/scripts/testcallback.py
+++ b/scripts/testcallback.py
@@ -7,21 +7,22 @@ import Murmur
class MetaCallbackI(Murmur.MetaCallback):
def started(self, s, current=None):
- global serverR
print "started"
- print s
- print s.id()
+ serverR=Murmur.ServerCallbackPrx.uncheckedCast(adapter.addWithUUID(ServerCallbackI(server, current.adapter)))
s.addCallback(serverR)
def stopped(self, s, current=None):
print "stopped"
- print s
- print s.id()
class ServerCallbackI(Murmur.ServerCallback):
+ def __init__(self, server, adapter):
+ self.server = server
+ self.contextR=Murmur.ServerContextCallbackPrx.uncheckedCast(adapter.addWithUUID(ServerContextCallbackI(server)))
+
def playerConnected(self, p, current=None):
print "connected"
print p
+ self.server.addContextCallback(p.session, "flubber", "Power up the T", self.contextR, Murmur.ContextChannel | Murmur.ContextPlayer)
def playerDisconnected(self, p, current=None):
print "disconnected"
@@ -29,6 +30,7 @@ class ServerCallbackI(Murmur.ServerCallback):
def playerStateChanged(self, p, current=None):
print "stateChanged"
+ print self.server
print p
def channelCreated(self, c, current=None):
@@ -43,25 +45,40 @@ class ServerCallbackI(Murmur.ServerCallback):
print "stateChanged"
print c
+class ServerContextCallbackI(Murmur.ServerContextCallback):
+ def __init__(self, server):
+ self.server = server
+
+ def contextAction(self, action, p, session, chanid, current=None):
+ print "aaand ACTION"
+ print action
+ print p
+ print session
+ print chanid
+ if (session != 0):
+ server.sendMessage(session, "Bouncy")
+ elif (chanid >= 0):
+ server.sendMessageChannel(chanid, 0, "Channel Bouncy")
+
if __name__ == "__main__":
+ global contextR
+
print "Creating callbacks...",
ice = Ice.initialize(sys.argv)
- meta = Murmur.MetaPrx.checkedCast(ice.stringToProxy('Meta:tcp -h 127.0.0.1 -p 6502'))
+ meta = Murmur.MetaPrx.checkedCast(ice.stringToProxy('Meta:tcp -h 127.0.0.1 -p 49152'))
- adapter = ice.createObjectAdapterWithEndpoints("Callback.Client", "tcp -h 127.0.0.1 -p 6503")
+ adapter = ice.createObjectAdapterWithEndpoints("Callback.Client", "tcp -h 127.0.0.1")
- adapter.add(MetaCallbackI(), ice.stringToIdentity("metaCallbackReceiver"))
- adapter.add(ServerCallbackI(), ice.stringToIdentity("serverCallbackReceiver"))
+ metaR=Murmur.MetaCallbackPrx.uncheckedCast(adapter.addWithUUID(MetaCallbackI()))
adapter.activate()
- metaR = Murmur.MetaCallbackPrx.uncheckedCast(adapter.createProxy(ice.stringToIdentity("metaCallbackReceiver")))
- serverR = Murmur.ServerCallbackPrx.uncheckedCast(adapter.createProxy(ice.stringToIdentity("serverCallbackReceiver")))
-
meta.addCallback(metaR)
for server in meta.getBootedServers():
+ serverR=Murmur.ServerCallbackPrx.uncheckedCast(adapter.addWithUUID(ServerCallbackI(server, adapter)))
server.addCallback(serverR)
+
print "Done"
print 'Script running (press CTRL-C to abort)';
try:
@@ -71,4 +88,4 @@ if __name__ == "__main__":
meta.removeCallback(metaR)
ice.shutdown()
- print "Goodbye" \ No newline at end of file
+ print "Goodbye"
diff --git a/src/Message.cpp b/src/Message.cpp
index 13497d4c2..5a935abad 100644
--- a/src/Message.cpp
+++ b/src/Message.cpp
@@ -163,6 +163,12 @@ Message *Message::networkToMessage(PacketDataStream &qdsIn) {
case CryptSync:
mMsg = new MessageCryptSync();
break;
+ case ContextAction:
+ mMsg = new MessageContextAction();
+ break;
+ case ContextAddAction:
+ mMsg = new MessageContextAddAction();
+ break;
default:
qWarning("Message: Type %d (session %d, size %d) is unknown type", iMessageType, uiSession, qdsIn.capacity());
}
@@ -273,6 +279,12 @@ void MessageHandler::dispatch(Connection *cCon, Message *msg) {
case Message::CryptSync:
msgCryptSync(cCon, static_cast<MessageCryptSync *>(msg));
break;
+ case Message::ContextAction:
+ msgContextAction(cCon, static_cast<MessageContextAction *>(msg));
+ break;
+ case Message::ContextAddAction:
+ msgContextAddAction(cCon, static_cast<MessageContextAddAction *>(msg));
+ break;
default:
qFatal("MessageHandler called with unknown message type %d", msg->messageType());
}
@@ -600,6 +612,40 @@ bool MessageCryptSync::isValid() const {
return (qbaNonce.isEmpty() || (qbaNonce.size() == AES_BLOCK_SIZE));
}
+void MessageContextAddAction::saveStream(PacketDataStream &qdsOut) const {
+ qdsOut << qsAction;
+ qdsOut << qsText;
+ qdsOut << static_cast<int>(ctx);
+}
+
+void MessageContextAddAction::restoreStream(PacketDataStream &qdsIn) {
+ qdsIn >> qsAction;
+ qdsIn >> qsText;
+ int c;
+ qdsIn >> c;
+ ctx = static_cast<Context>(c);
+}
+
+bool MessageContextAddAction::isValid() const {
+ return (! qsAction.isEmpty() && (ctx & (CtxServer | CtxPlayer | CtxChannel)));
+}
+
+void MessageContextAction::saveStream(PacketDataStream &qdsOut) const {
+ qdsOut << qsAction;
+ qdsOut << uiVictim;
+ qdsOut << iChannel;
+}
+
+void MessageContextAction::restoreStream(PacketDataStream &qdsIn) {
+ qdsIn >> qsAction;
+ qdsIn >> uiVictim;
+ qdsIn >> iChannel;
+}
+
+bool MessageContextAction::isValid() const {
+ return (! qsAction.isEmpty());
+}
+
PacketDataStream & operator<< (PacketDataStream & out, const MessageEditACL::GroupStruct &gs) {
out << gs.qsName;
out << gs.bInherited;
diff --git a/src/Message.h b/src/Message.h
index b33a224ba..1d0908643 100644
--- a/src/Message.h
+++ b/src/Message.h
@@ -43,7 +43,7 @@ class Message {
virtual void saveStream(PacketDataStream &) const;
virtual void restoreStream(PacketDataStream &);
public:
- enum MessageType { ServerReject, ServerAuthenticate, Speex, ServerSync, ServerJoin, ServerLeave, ServerBanList, PlayerMute, PlayerDeaf, PlayerKick, PlayerRename, PlayerBan, PlayerMove, PlayerSelfMuteDeaf, ChannelAdd, ChannelRemove, ChannelMove, ChannelLink, ChannelRename, PermissionDenied, EditACL, QueryUsers, Ping, TextMessage, PlayerTexture, CryptSetup, CryptSync, PingStats };
+ enum MessageType { ServerReject, ServerAuthenticate, Speex, ServerSync, ServerJoin, ServerLeave, ServerBanList, PlayerMute, PlayerDeaf, PlayerKick, PlayerRename, PlayerBan, PlayerMove, PlayerSelfMuteDeaf, ChannelAdd, ChannelRemove, ChannelMove, ChannelLink, ChannelRename, PermissionDenied, EditACL, QueryUsers, Ping, TextMessage, PlayerTexture, CryptSetup, CryptSync, PingStats, ContextAction, ContextAddAction };
unsigned int uiSession;
Message();
@@ -435,6 +435,35 @@ class MessageCryptSync : public Message {
bool isValid() const;
};
+class MessageContextAddAction : public Message {
+ protected:
+ void saveStream(PacketDataStream &) const;
+ void restoreStream(PacketDataStream &);
+ public:
+ enum Context { CtxServer = 0x01, CtxChannel = 0x02, CtxPlayer = 0x04 };
+ QString qsAction;
+ QString qsText;
+ Context ctx;
+ Message::MessageType messageType() const {
+ return ContextAddAction;
+ }
+ bool isValid() const;
+};
+
+class MessageContextAction : public Message {
+ protected:
+ void saveStream(PacketDataStream &) const;
+ void restoreStream(PacketDataStream &);
+ public:
+ QString qsAction;
+ unsigned int uiVictim;
+ int iChannel;
+ Message::MessageType messageType() const {
+ return ContextAction;
+ }
+ bool isValid() const;
+};
+
class MessageHandler {
protected:
virtual void msgSpeex(Connection *, MessageSpeex *) = 0;
@@ -465,6 +494,8 @@ class MessageHandler {
virtual void msgTexture(Connection *, MessageTexture *) = 0;
virtual void msgCryptSetup(Connection *, MessageCryptSetup *) = 0;
virtual void msgCryptSync(Connection *, MessageCryptSync *) = 0;
+ virtual void msgContextAddAction(Connection *, MessageContextAddAction *) = 0;
+ virtual void msgContextAction(Connection *, MessageContextAction *) = 0;
void dispatch(Connection *, Message *);
public:
virtual ~MessageHandler() { };
diff --git a/src/murmur/Messages.cpp b/src/murmur/Messages.cpp
index cba523237..ed9264cbf 100644
--- a/src/murmur/Messages.cpp
+++ b/src/murmur/Messages.cpp
@@ -928,3 +928,16 @@ void Server::msgCryptSync(Connection *cCon, MessageCryptSync *msg) {
cCon->disconnectSocket();
}
}
+
+void Server::msgContextAddAction(Connection *cCon, MessageContextAddAction *) {
+ cCon->disconnectSocket();
+}
+
+void Server::msgContextAction(Connection *cCon, MessageContextAction *msg) {
+ MSG_SETUP(Player::Authenticated);
+ if ((msg->uiVictim > 0) && ! qhUsers.contains(msg->uiVictim))
+ return;
+ if ((msg->iChannel >= 0) && ! qhChannels.contains(msg->iChannel))
+ return;
+ emit contextAction(uSource, msg->qsAction, msg->uiVictim, msg->iChannel);
+}
diff --git a/src/murmur/Murmur.ice b/src/murmur/Murmur.ice
index 677e25693..56a92f737 100644
--- a/src/murmur/Murmur.ice
+++ b/src/murmur/Murmur.ice
@@ -226,6 +226,27 @@ module Murmur
idempotent void channelStateChanged(Channel state);
};
+ /** Context for actions in the Server menu. */
+ const int ContextServer = 0x01;
+ /** Context for actions in the Channel menu. */
+ const int ContextChannel = 0x02;
+ /** Context for actions in the Player menu. */
+ const int ContextPlayer = 0x04;
+
+ /** Callback interface for context actions. You need to supply one of these for [Server::addContext].
+ * If an added callback ever throws an exception or goes away, it will be automatically removed.
+ * Please note that all callbacks are done asynchronously; murmur does not wait for the callback to
+ * complete before continuing processing.
+ */
+ interface ServerContextCallback {
+ /** Called when a context action is performed.
+ * @param action Action to be performed.
+ * @param user User which initiated the action.
+ * @param session If nonzero, session of target player.
+ * @param channelid If nonzero, session of target channel.
+ */
+ idempotent void contextAction(string action, Player user, int session, int channelid);
+ };
/** Per-server interface. This includes all methods for configuring and altering
* the state of a single virtual server. You can retrieve a pointer to this interface
@@ -351,6 +372,24 @@ module Murmur
* @see sendMessageChannel
*/
void sendMessage(int session, string text) throws ServerBootedException, InvalidSessionException;
+
+ /** Add a context callback. This is done per player, and will add a context menu action for the player.
+ *
+ * @param session Session of user which should receive context entry.
+ * @param action Action string, a unique name to associate with the action.
+ * @param text Name of action shown to user.
+ * @param cb Callback interface which will receive notifications.
+ * @param ctx Context this should be used in. Needs to be one or a combination of [ContextServer], [ContextChannel] and [ContextPlayer].
+ * @see removeContextCallback
+ */
+ void addContextCallback(int session, string action, string text, ServerContextCallback *cb, int ctx) throws ServerBootedException, InvalidCallbackException;
+
+ /** Remove a callback.
+ *
+ * @param cb Callback interface to be removed. This callback will be removed from all from all players.
+ * @see addContextCallback
+ */
+ void removeContextCallback(ServerContextCallback *cb) throws ServerBootedException, InvalidCallbackException;
/** Get state of single channel.
* @param channelid ID of Channel. See [Channel::id].
diff --git a/src/murmur/MurmurI.h b/src/murmur/MurmurI.h
index b0c9c7cf1..904f24802 100644
--- a/src/murmur/MurmurI.h
+++ b/src/murmur/MurmurI.h
@@ -73,6 +73,9 @@ class ServerI : virtual public Server {
const ::std::string&,
const Ice::Current&);
+ virtual void addContextCallback_async(const ::Murmur::AMD_Server_addContextCallbackPtr&, ::Ice::Int, const ::std::string&, const ::std::string&, const ::Murmur::ServerContextCallbackPrx&, int, const ::Ice::Current&);
+ virtual void removeContextCallback_async(const ::Murmur::AMD_Server_removeContextCallbackPtr&, const ::Murmur::ServerContextCallbackPrx&, const ::Ice::Current&);
+
virtual void getState_async(const ::Murmur::AMD_Server_getStatePtr&,
::Ice::Int,
const Ice::Current&);
diff --git a/src/murmur/MurmurIce.cpp b/src/murmur/MurmurIce.cpp
index 8baf5c791..53220eb88 100644
--- a/src/murmur/MurmurIce.cpp
+++ b/src/murmur/MurmurIce.cpp
@@ -183,13 +183,13 @@ void MurmurIce::customEvent(QEvent *evt) {
}
void MurmurIce::badMetaProxy(const ::Murmur::MetaCallbackPrx &prx) {
- qmMetaCallbacks.removeAll(prx);
qCritical("Registered Ice MetaCallback %s failed", qPrintable(QString::fromStdString(communicator->proxyToString(prx))));
+ qmMetaCallbacks.removeAll(prx);
}
void MurmurIce::badServerProxy(const ::Murmur::ServerCallbackPrx &prx, int id) {
- qmServerCallbacks[id].removeAll(prx);
qCritical("Registered Ice ServerCallback %s on server %d failed", qPrintable(QString::fromStdString(communicator->proxyToString(prx))), id);
+ qmServerCallbacks[id].removeAll(prx);
}
static ServerPrx idToProxy(int id, const Ice::ObjectAdapterPtr &adapter) {
@@ -201,12 +201,15 @@ static ServerPrx idToProxy(int id, const Ice::ObjectAdapterPtr &adapter) {
}
void MurmurIce::started(::Server *s) {
+ s->connectListener(mi);
+ connect(s, SIGNAL(contextAction(const Player *, const QString &, unsigned int, int)), this, SLOT(contextAction(const Player *, const QString &, unsigned int, int)));
+
const QList< ::Murmur::MetaCallbackPrx> &qmList = qmMetaCallbacks;
if (qmList.isEmpty())
return;
- foreach(::Murmur::MetaCallbackPrx prx, qmList) {
+ foreach(const ::Murmur::MetaCallbackPrx &prx, qmList) {
try {
prx->started(idToProxy(s->iServerNum, adapter));
} catch (...) {
@@ -223,7 +226,7 @@ void MurmurIce::stopped(::Server *s) {
if (qmList.isEmpty())
return;
- foreach(::Murmur::MetaCallbackPrx prx, qmList) {
+ foreach(const ::Murmur::MetaCallbackPrx &prx, qmList) {
try {
prx->stopped(idToProxy(s->iServerNum, adapter));
} catch (...) {
@@ -243,7 +246,7 @@ void MurmurIce::playerConnected(const ::Player *p) {
::Murmur::Player mp;
playerToPlayer(p, mp);
- foreach(::Murmur::ServerCallbackPrx prx, qmList) {
+ foreach(const ::Murmur::ServerCallbackPrx &prx, qmList) {
try {
prx->playerConnected(mp);
} catch (...) {
@@ -254,6 +257,8 @@ void MurmurIce::playerConnected(const ::Player *p) {
void MurmurIce::playerDisconnected(const ::Player *p) {
::Server *s = qobject_cast< ::Server *> ( sender());
+
+ mi->qmServerContextCallbacks[s->iServerNum].remove(p->uiSession);
const QList< ::Murmur::ServerCallbackPrx> &qmList = qmServerCallbacks[s->iServerNum];
@@ -263,7 +268,7 @@ void MurmurIce::playerDisconnected(const ::Player *p) {
::Murmur::Player mp;
playerToPlayer(p, mp);
- foreach(::Murmur::ServerCallbackPrx prx, qmList) {
+ foreach(const ::Murmur::ServerCallbackPrx &prx, qmList) {
try {
prx->playerDisconnected(mp);
} catch (...) {
@@ -283,7 +288,7 @@ void MurmurIce::playerStateChanged(const ::Player *p) {
::Murmur::Player mp;
playerToPlayer(p, mp);
- foreach(::Murmur::ServerCallbackPrx prx, qmList) {
+ foreach(const ::Murmur::ServerCallbackPrx &prx, qmList) {
try {
prx->playerStateChanged(mp);
} catch (...) {
@@ -303,7 +308,7 @@ void MurmurIce::channelCreated(const ::Channel *c) {
::Murmur::Channel mc;
channelToChannel(c, mc);
- foreach(::Murmur::ServerCallbackPrx prx, qmList) {
+ foreach(const ::Murmur::ServerCallbackPrx &prx, qmList) {
try {
prx->channelCreated(mc);
} catch (...) {
@@ -323,7 +328,7 @@ void MurmurIce::channelRemoved(const ::Channel *c) {
::Murmur::Channel mc;
channelToChannel(c, mc);
- foreach(::Murmur::ServerCallbackPrx prx, qmList) {
+ foreach(const ::Murmur::ServerCallbackPrx &prx, qmList) {
try {
prx->channelRemoved(mc);
} catch (...) {
@@ -343,7 +348,7 @@ void MurmurIce::channelStateChanged(const ::Channel *c) {
::Murmur::Channel mc;
channelToChannel(c, mc);
- foreach(::Murmur::ServerCallbackPrx prx, qmList) {
+ foreach(const ::Murmur::ServerCallbackPrx &prx, qmList) {
try {
prx->channelStateChanged(mc);
} catch (...) {
@@ -352,11 +357,38 @@ void MurmurIce::channelStateChanged(const ::Channel *c) {
}
}
+void MurmurIce::contextAction(const ::Player *pSrc, const QString &action, unsigned int session, int iChannel) {
+ ::Server *s = qobject_cast< ::Server *> ( sender());
+
+ QMap<int, QMap<int, QMap<QString, ::Murmur::ServerContextCallbackPrx> > > &qmAll = mi->qmServerContextCallbacks;
+ if (! qmAll.contains(s->iServerNum))
+ return;
+
+ QMap<int, QMap<QString, ::Murmur::ServerContextCallbackPrx> > &qmServer = qmAll[s->iServerNum];
+ if (! qmServer.contains(pSrc->uiSession))
+ return;
+
+ QMap<QString, ::Murmur::ServerContextCallbackPrx> &qmPlayer = qmServer[pSrc->uiSession];
+ if (! qmPlayer.contains(action))
+ return;
+
+ const ::Murmur::ServerContextCallbackPrx &prx = qmPlayer[action];
+
+ ::Murmur::Player mp;
+ playerToPlayer(pSrc, mp);
+
+ try {
+ prx->contextAction(toStdUtf8String(action), mp, session, iChannel);
+ } catch (...) {
+ qCritical("Registered Ice ServerContextCallback %s on server %d, session %d, action %s failed", qPrintable(QString::fromStdString(communicator->proxyToString(prx))), s->iServerNum, pSrc->uiSession, qPrintable(action));
+ qmPlayer.remove(action);
+ }
+}
+
Ice::ObjectPtr ServerLocator::locate(const Ice::Current &, Ice::LocalObjectPtr &) {
return iopServer;
}
-
#define FIND_SERVER \
::Server *server = meta->qhServers.value(server_id);
@@ -436,8 +468,6 @@ static void impl_Server_addCallback(const Murmur::AMD_Server_addCallbackPtr &cb,
try {
const Murmur::ServerCallbackPrx &oneway = Murmur::ServerCallbackPrx::checkedCast(cbptr->ice_oneway());
- if (qmList.isEmpty())
- server->connectListener(mi);
if (! qmList.contains(oneway))
qmList.append(oneway);
cb->ice_response();
@@ -453,8 +483,6 @@ static void impl_Server_removeCallback(const Murmur::AMD_Server_removeCallbackPt
try {
const Murmur::ServerCallbackPrx &oneway = Murmur::ServerCallbackPrx::uncheckedCast(cbptr->ice_oneway());
qmList.removeAll(oneway);
- if (qmList.isEmpty())
- server->disconnectListener(mi);
cb->ice_response();
} catch (...) {
cb->ice_exception(InvalidCallbackException());
@@ -616,6 +644,54 @@ static void impl_Server_sendMessage(const ::Murmur::AMD_Server_sendMessagePtr cb
cb->ice_response();
}
+static void impl_Server_addContextCallback(const Murmur::AMD_Server_addContextCallbackPtr &cb, int server_id, ::Ice::Int session, const ::std::string& action, const ::std::string& text, const ::Murmur::ServerContextCallbackPrx& cbptr, int ctx) {
+ NEED_SERVER;
+ NEED_PLAYER;
+
+ QMap<QString, ::Murmur::ServerContextCallbackPrx> & qmPrx = mi->qmServerContextCallbacks[server_id][session];
+
+ if (! (ctx & (MessageContextAddAction::CtxServer | MessageContextAddAction::CtxChannel | MessageContextAddAction::CtxPlayer))) {
+ cb->ice_exception(InvalidCallbackException());
+ return;
+ }
+
+ try {
+ const Murmur::ServerContextCallbackPrx &oneway = Murmur::ServerContextCallbackPrx::checkedCast(cbptr->ice_oneway());
+ qmPrx.insert(fromStdUtf8String(action), oneway);
+ cb->ice_response();
+ } catch (...) {
+ cb->ice_exception(InvalidCallbackException());
+ return;
+ }
+
+ MessageContextAddAction mcaa;
+ mcaa.uiSession = 0;
+ mcaa.qsAction = fromStdUtf8String(action);
+ mcaa.qsText = fromStdUtf8String(text);
+ mcaa.ctx = static_cast<MessageContextAddAction::Context>(ctx);
+ server->sendMessage(user, &mcaa);
+}
+
+static void impl_Server_removeContextCallback(const Murmur::AMD_Server_removeContextCallbackPtr &cb, int server_id, const Murmur::ServerContextCallbackPrx& cbptr) {
+ NEED_SERVER;
+
+ QMap<int, QMap<QString, ::Murmur::ServerContextCallbackPrx> > & qmPrx = mi->qmServerContextCallbacks[server_id];
+
+ try {
+ const Murmur::ServerContextCallbackPrx &oneway = Murmur::ServerContextCallbackPrx::uncheckedCast(cbptr->ice_oneway());
+
+ foreach(int session, qmPrx.keys()) {
+ QMap<QString, ::Murmur::ServerContextCallbackPrx> qm = qmPrx[session];
+ foreach(const QString &act, qm.keys(oneway))
+ qm.remove(act);
+ }
+
+ cb->ice_response();
+ } catch (...) {
+ cb->ice_exception(InvalidCallbackException());
+ }
+}
+
static void impl_Server_getState(const ::Murmur::AMD_Server_getStatePtr cb, int server_id, ::Ice::Int session) {
NEED_SERVER;
NEED_PLAYER;
diff --git a/src/murmur/MurmurIce.h b/src/murmur/MurmurIce.h
index f64eb3a67..18384f03c 100644
--- a/src/murmur/MurmurIce.h
+++ b/src/murmur/MurmurIce.h
@@ -56,6 +56,7 @@ class MurmurIce : public QObject {
public:
QList< ::Murmur::MetaCallbackPrx> qmMetaCallbacks;
QMap<int, QList< ::Murmur::ServerCallbackPrx> > qmServerCallbacks;
+ QMap<int, QMap<int, QMap<QString, ::Murmur::ServerContextCallbackPrx> > > qmServerContextCallbacks;
MurmurIce();
~MurmurIce();
public slots:
@@ -84,6 +85,8 @@ class MurmurIce : public QObject {
void channelStateChanged(const Channel *c);
void channelCreated(const Channel *c);
void channelRemoved(const Channel *c);
+
+ void contextAction(const Player *, const QString &, unsigned int, int);
};
#endif
#endif
diff --git a/src/murmur/MurmurIceWrapper.cpp b/src/murmur/MurmurIceWrapper.cpp
index 47c032679..73893c899 100644
--- a/src/murmur/MurmurIceWrapper.cpp
+++ b/src/murmur/MurmurIceWrapper.cpp
@@ -82,6 +82,14 @@ void ::Murmur::ServerI::sendMessage_async(const ::Murmur::AMD_Server_sendMessage
IceEvent *ie = new IceEvent(boost::bind(&impl_Server_sendMessage, cb, QString::fromStdString(current.id.name).toInt(), p1, p2));
QCoreApplication::instance()->postEvent(mi, ie);
};
+void ::Murmur::ServerI::addContextCallback_async(const ::Murmur::AMD_Server_addContextCallbackPtr &cb, ::Ice::Int p1, const ::std::string& p2, const ::std::string& p3, const ::Murmur::ServerContextCallbackPrx& p4, ::Ice::Int p5, const ::Ice::Current &current) {
+ IceEvent *ie = new IceEvent(boost::bind(&impl_Server_addContextCallback, cb, QString::fromStdString(current.id.name).toInt(), p1, p2, p3, p4, p5));
+ QCoreApplication::instance()->postEvent(mi, ie);
+};
+void ::Murmur::ServerI::removeContextCallback_async(const ::Murmur::AMD_Server_removeContextCallbackPtr &cb, const ::Murmur::ServerContextCallbackPrx& p1, const ::Ice::Current &current) {
+ IceEvent *ie = new IceEvent(boost::bind(&impl_Server_removeContextCallback, cb, QString::fromStdString(current.id.name).toInt(), p1));
+ QCoreApplication::instance()->postEvent(mi, ie);
+};
void ::Murmur::ServerI::getChannelState_async(const ::Murmur::AMD_Server_getChannelStatePtr &cb, ::Ice::Int p1, const ::Ice::Current &current) {
IceEvent *ie = new IceEvent(boost::bind(&impl_Server_getChannelState, cb, QString::fromStdString(current.id.name).toInt(), p1));
QCoreApplication::instance()->postEvent(mi, ie);
diff --git a/src/murmur/Server.h b/src/murmur/Server.h
index 68aa4471f..7ae3603f9 100644
--- a/src/murmur/Server.h
+++ b/src/murmur/Server.h
@@ -247,6 +247,8 @@ class Server : public QThread, public MessageHandler {
void channelStateChanged(const Channel *);
void channelCreated(const Channel *);
void channelRemoved(const Channel *);
+
+ void contextAction(const Player *, const QString &, unsigned int, int);
public:
void setPlayerState(Player *p, Channel *parent, bool mute, bool deaf, bool suppressed);
bool setChannelState(Channel *c, Channel *parent, const QString &qsName, const QSet<Channel *> &links);
@@ -314,6 +316,8 @@ class Server : public QThread, public MessageHandler {
virtual void msgTexture(Connection *, MessageTexture *);
virtual void msgCryptSetup(Connection *, MessageCryptSetup *);
virtual void msgCryptSync(Connection *, MessageCryptSync *);
+ virtual void msgContextAddAction(Connection *, MessageContextAddAction *);
+ virtual void msgContextAction(Connection *, MessageContextAction *);
};