diff options
author | Thorvald Natvig <slicer@users.sourceforge.net> | 2009-02-13 02:13:51 +0300 |
---|---|---|
committer | Thorvald Natvig <slicer@users.sourceforge.net> | 2009-02-13 02:13:51 +0300 |
commit | 261483efee45c47ff8673815b22404f33e318d4f (patch) | |
tree | 47cb991adfe529e86326a4966ca78582e4825a7d | |
parent | e64d33be0516fd85913a0d875d10eaf4fe4df4ee (diff) |
Context actions for Ice
git-svn-id: https://mumble.svn.sourceforge.net/svnroot/mumble/trunk@1521 05730e5d-ab1b-0410-a4ac-84af385074fa
-rwxr-xr-x | scripts/testcallback.py | 43 | ||||
-rw-r--r-- | src/Message.cpp | 46 | ||||
-rw-r--r-- | src/Message.h | 33 | ||||
-rw-r--r-- | src/murmur/Messages.cpp | 13 | ||||
-rw-r--r-- | src/murmur/Murmur.ice | 39 | ||||
-rw-r--r-- | src/murmur/MurmurI.h | 3 | ||||
-rw-r--r-- | src/murmur/MurmurIce.cpp | 106 | ||||
-rw-r--r-- | src/murmur/MurmurIce.h | 3 | ||||
-rw-r--r-- | src/murmur/MurmurIceWrapper.cpp | 8 | ||||
-rw-r--r-- | src/murmur/Server.h | 4 |
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 ¤t) { + 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 ¤t) { + 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 ¤t) { 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 *); }; |