# # You should have received a copy of the GNU General Public License # along with Warzone 2100; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # ############################################################################### __all__ = ['Protocol4'] from twisted.internet import defer from twisted.python import log from socketrpc.twisted_srpc import SocketRPCProtocol, set_serializer, Fault from wzlobby import settings set_serializer('bson') NO_GAME = -402 NOT_ACCEPTABLE = -403 WRONG_LOGIN = -404 LOGIN_REQUIRED = -405 SESSION_INVALID = -406 class Protocol4(SocketRPCProtocol): game = None lobbyVersion = 4 def connectionMade(self): SocketRPCProtocol.connectionMade(self)
# along with Warzone 2100; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # ############################################################################### # This is the V4 Variant of the Protocol - BSON. __all__ = ['Protocol4'] from twisted.internet import defer from twisted.python import log from socketrpc.twisted_srpc import SocketRPCProtocol, set_serializer, Fault from wzlobby import settings set_serializer('jsonlib') NO_GAME = -402 NOT_ACCEPTABLE = -403 WRONG_LOGIN = -404 LOGIN_REQUIRED = -405 SESSION_INVALID = -406 class Protocol4(SocketRPCProtocol): game = None lobbyVersion = 4 def connectionMade(self): SocketRPCProtocol.connectionMade(self)
def start(options): log.startLogging(sys.stdout) SocketRPCProtocol.debug = options['debug'] set_serializer(options['serializer']) mode = options['mode'] if mode == 'server': class ServerProtocol(SocketRPCProtocol): def docall_echo(self, args): return defer.succeed(args) def docall_bounce(self, args): """ This is just here to show that server is able to do a "call" on the client """ return self.call(args[0], args[1]) def docall_largedata(self, args): return "\0" * 1024 * 1024 * 3 f = protocol.ServerFactory() f.protocol = ServerProtocol reactor.listenTCP(options['port'], f) elif mode.startswith('client'): params = {'g': 'is', 'e': 'very', 'v': 'cool', 'e': 'fast', 'n': 'and', 't': 'sexy!'} class ClientProtocol(SocketRPCProtocol): def docall_log(self, args): log.msg('"%s" logged from the server' % args[1]) return '%s: logged on the client, facility: %d' % (args[1], args[0]) def gotProtocol(client, mode): if mode == 'clientbounce': client.call('bounce', ['log', (60, 'test')]) elif mode == 'clientlarge': dl = [] for i in xrange(options['requests']): dl.append(client.call('largedata', [])) dl = defer.DeferredList(dl) dl.addCallback(lambda ign: reactor.stop()) elif mode == 'clientparallel': def run100(): dl = [] for i in xrange(100): dl.append(client.call('echo', params)) dl = defer.DeferredList(dl) return for i in xrange(options['requests'] / 100): run100() elif mode == 'clientserial': d = defer.Deferred() for i in xrange(options['requests']): d.addCallback(lambda ign: client.call('echo', params)) d.addCallback(lambda ign: reactor.stop()) d.callback(None) client = protocol.ClientCreator(reactor, ClientProtocol) client.connectTCP(options['host'], options['port']).addCallback(gotProtocol, mode) reactor.run()
import supybot.plugins as plugins import supybot.ircdb as ircdb import supybot.ircutils as ircutils import supybot.callbacks as callbacks # To notify all channels. import supybot.world as world import supybot.ircmsgs as ircmsgs import struct from supybot.drivers.Twisted import reactor from twisted.internet.task import LoopingCall from socketrpc.twisted_srpc import SocketRPCClient, set_serializer set_serializer("jsonlib") class LobbyClient(SocketRPCClient): def __init__(self, user, password): self._user = user self._password = password def clientConnectionMade(self, factory): SocketRPCClient.clientConnectionMade(self, factory) # Send the version command first. self.remote.transport.write(struct.pack("!8sI", "version", 4)) # now login self.call("login", username=self._user, password=self._password)