class HammerClient(object): def __init__(self, server, port, sessionid="", *args, **kw): self.sock = SocketIOClient(server, port, *args, **kw) self.sessionid = sessionid self.sock.on("connect", self._connect) self.sock.on("server", self._server) self.sock.on("close", self._close) self.binds = {} self.app_binds = {} self.bind("hammerlib", "connected", self._connected) def run(self): while True: self.sock.run() def bind(self, cmd, type, callback): self.binds.setdefault("%s:%s" % (cmd, type), []).append(callback) def unbind(self, cmd, type, callback): self.binds["%s:%s" % (cmd, type)].remove(callback) def bind_app(self, cmd, callback): self.app_binds.setdefault(cmd, []).append(callback) def unbind_app(self, cmd, callback): self.app_binds[cmd].remove(callback) def send(self, cmd, type, data): if not isinstance(data, basestring): data = json.dumps(data) self.sock.emit(u"browser", u"%s:%s:%s\r\n" % (cmd, type, data)) def _connect(self): self.send("hammerlib", "get_clientid", self.sessionid) def _fire_app_event(self, cmd, type, message): for callback in self.app_binds.get(cmd, []): callback(cmd, type, message) def _fire_event(self, cmd, type, message): for callback in self.binds.get("%s:%s" % (cmd, type), []): callback(cmd, type, message) def _fire(self, cmd, type, message): self._fire_event(cmd, type, message) self._fire_app_event(cmd, type, message) def _connected(self, cmd, type, data): self._fire("hammerlib", "opened", "") def _server(self, data): cmd, type, data = data["message"].split(":", 2) data = json.loads(data) print cmd, type, data self._fire(cmd, type, data) def _close(self): self._fire("hammerlib", "closed", "")
def __init__(self, server, port, sessionid="", *args, **kw): self.sock = SocketIOClient(server, port, *args, **kw) self.sessionid = sessionid self.sock.on("connect", self._connect) self.sock.on("server", self._server) self.sock.on("close", self._close) self.binds = {} self.app_binds = {} self.bind("hammerlib", "connected", self._connected)
#!/usr/bin/env python # -*- coding: utf-8 -*- from amitu.socketio_client import SocketIOClient, MessagePacket sock = SocketIOClient("localhost", 83) def after_start(): print("opened!") sock.send(MessagePacket(data='{"type":"meta","data":{"password":"******", "domain":"demo"}}')) sock.send(MessagePacket(data='{"type":"subscribe","channel":"demo_8003"}')) sock.on("message", on_message) def on_message(data): print data sock.on("connect", after_start) sock.run()