def test_queue(self): request = _create_blocking_request_hixie75() receiver = msgutil.MessageReceiver(request) self.assertEqual(None, receiver.receive_nowait()) request.connection.put_bytes('\x00Hello!\xff') self.assertEqual('Hello!', receiver.receive())
def test_queue(self): request = _create_blocking_request() receiver = msgutil.MessageReceiver(request) self.assertEqual(None, receiver.receive_nowait()) request.connection.put_bytes('\x81\x86' + _mask_hybi('Hello!')) self.assertEqual('Hello!', receiver.receive())
def test_onmessage(self): onmessage_queue = Queue.Queue() def onmessage_handler(message): onmessage_queue.put(message) request = _create_blocking_request_hixie75() receiver = msgutil.MessageReceiver(request, onmessage_handler) request.connection.put_bytes('\x00Hello!\xff') self.assertEqual('Hello!', onmessage_queue.get())
def test_onmessage(self): onmessage_queue = Queue.Queue() def onmessage_handler(message): onmessage_queue.put(message) request = _create_blocking_request() receiver = msgutil.MessageReceiver(request, onmessage_handler) request.connection.put_bytes('\x81\x86' + _mask_hybi('Hello!')) self.assertEqual('Hello!', onmessage_queue.get())
def web_socket_transfer_data(request): """ Loop while connection exists and process data to be sent and received. """ try: line = request.ws_stream.receive_message() if str(line).startswith('username'): username = str(line)[8:] line = request.ws_stream.receive_message() if str(line).startswith('password'): passwd = 'AIR_' + str(line)[8:] out_message = '' client = xmpp.Client('pvp.net', debug=[]) if client.connect(server=('chat.na1.lol.riotgames.com', 5223)) == "": request.ws_stream.send_message(CONN_ERROR, binary=False) return if client.auth(username, passwd, "xiff") == None: request.ws_stream.send_message(AUTH_ERROR, binary=False) return if client.isConnected(): keepalive = datetime.now() client.sendInitPresence(requestRoster=1) pres = xmpp.Presence(show='chat') pres.setStatus(STATUS_MSG) client.send(pres) message_sender = msgutil.MessageSender(request) message_receiver = msgutil.MessageReceiver(request) incoming_thread = CheckMessages(client, message_sender) incoming_thread.setDaemon(True) incoming_thread.start() client.RegisterHandler('presence', incoming_thread.presence_update) client.RegisterHandler('message', incoming_thread.message_update) request.ws_stream.send_message(CONN_SUCCESS, binary=False) to_jid = None #jid for the user receiving the message while True: line = message_receiver.receive_nowait() if client.isConnected(): #Check connection on each loop if line != None: out_message = str(line) if ((out_message != "Keep alive") and (out_message != "Kill session")): split_out = out_message.split() roster = client.getRoster() try: if split_out[0] == '#:#outmessage#:#': to_jid = split_out[1][3:-3] out_message = ' '.join(split_out[2:]) except IndexError: to_jid = None out_message = '' if to_jid: for user in incoming_thread.alive_users: if str(roster.getName(user)).lower() == str(to_jid).lower(): to_jid = user valid_jid = True break else: valid_jid = False if valid_jid: message = xmpp.Message(to_jid, out_message) message.setAttr('type', 'chat') client.send(message) else: request.ws_stream.send_message(USER_WARNING, binary=False) if (out_message == "Kill session"): client.disconnect() return if (datetime.now() - keepalive).seconds > WEBSOCKET_TIMEOUT: client.disconnect() return else: try: request.ws_stream.send_message(CONN_ERROR, binary=False) except: #Don't crap out and leave a zombie process if the xmpp connection drops along with the websocket session pass return #Execute keep alive request regardless of the status of the xmpp connection if (str(line) == "Keep alive"): keepalive = datetime.now() #Throttle message receiving otherwise the non-blocking state of the loop will cause it to execute as fast as possible time.sleep(RECEIVE_BUFFER) else: try: request.ws_stream.send_message(CONN_ERROR, binary=False) except: #Don't crap out and leave a zombie process if the xmpp connection drops along with the websocket session pass return except: #Something was causing apache to overload... Meh? return