def test_send_nowait(self): # Use a queue to check the bytes written by MessageSender. # request.connection.written_data() cannot be used here because # MessageSender runs in a separate thread. send_queue = Queue.Queue() def write(bytes): send_queue.put(bytes) request = _create_blocking_request_hixie75() request.connection.write = write sender = msgutil.MessageSender(request) sender.send_nowait('Hello') sender.send_nowait('World') self.assertEqual('\x00Hello\xff', send_queue.get()) self.assertEqual('\x00World\xff', send_queue.get())
def test_send(self): request = _create_blocking_request() sender = msgutil.MessageSender(request) sender.send('World') self.assertEqual(b'\x81\x05World', request.connection.written_data())
def test_send(self): request = _create_blocking_request_hixie75() sender = msgutil.MessageSender(request) sender.send('World') self.assertEqual('\x00World\xff', request.connection.written_data())
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