예제 #1
0
 def __init__(self, host, port, user=None, password=None):
     self.host, self.port = host, port
     self.user = user or 'guest'
     self.password = password or ''
     self.socket = socket(AF_INET, SOCK_STREAM)
     self.socket.connect((self.host, self.port))
     self.msg = JimMessage()
     self.rsp = JimResponse()
예제 #2
0
 def test_leave(self):
     msg = JimMessage()
     msg.compose('leave', room='#chatroom')
     assert msg.encode(), {
         'action': 'leave',
         'time': int(time.time()),
         'room': '#chatroom'
     }
예제 #3
0
 def send_message(self, user, message):
     self.msg.compose('msg', msg_to=user, msg_from=self.user, msg=message)
     if self.msg.send_message(self.socket):
         response = self.rsp.read_response(self.socket)
         if user.startswith('#'):
             msg = JimMessage()
             msg.read_message(self.socket)
         return response
     return None
예제 #4
0
 def test_msg(self):
     msg = JimMessage()
     msg.compose('msg',
                 msg_to='Recipient',
                 msg_from='Sender',
                 msg='Test Message')
     assert msg.encode(), {
         'action': 'msg',
         'to': 'Recipient',
         'from': 'Sender',
         'time': int(time.time()),
         'message': 'Test Message'
     }
예제 #5
0
 def test_auth(self):
     msg = JimMessage()
     msg.compose('authenticate',
                 user={
                     'account_name': 'JohnDoe',
                     'password': '******'
                 })
     assert msg.encode(), {
         'action': 'authenticate',
         'time': int(time.time()),
         'user': {
             'account_name': 'JohnDoe',
             'password': '******'
         }
     }
예제 #6
0
 def test_presence(self):
     msg = JimMessage()
     msg.compose('presence',
                 user={
                     'account_name': 'JohnDoe',
                     'status': 'here'
                 })
     assert msg.encode(), {
         'action': 'presence',
         'time': int(time.time()),
         'user': {
             'account_name': 'JohnDoe',
             'status': 'here'
         }
     }
예제 #7
0
 def handle(self):
     chatroom.adduser(self.request)
     server_log.info('connected {} clients'.format(chatroom.num_users()))
     while True:
         msg = JimMessage()
         rsp = JimResponse()
         try:
             data = msg.read_message(self.request)
             server_log.info('Received from client: {}'.format(data))
             self.handle_input(data).send_response(self.request)
             if data['action'] == 'msg':
                 if data['to'].startswith('#'):
                     server_log.info(
                         'Sending message to chat {}'.format(data))
                     chatroom.send_to_all(msg)
         except:
             break
         del msg
         del rsp
     server_log.info('client disconnected')
     chatroom.deluser(self.request)
예제 #8
0
class JimClient:
    def __init__(self, host, port, user=None, password=None):
        self.host, self.port = host, port
        self.user = user or 'guest'
        self.password = password or ''
        self.socket = socket(AF_INET, SOCK_STREAM)
        self.socket.connect((self.host, self.port))
        self.msg = JimMessage()
        self.rsp = JimResponse()

    def disconnect(self):
        self.socket.close()

    def send_presence(self, status=''):
        if status == '':
            self.msg.compose('presence',
                             user={
                                 'account_name': self.user,
                                 'status': status
                             })
        else:
            self.msg.compose('presence',
                             type='status',
                             user={
                                 'account_name': self.user,
                                 'status': status
                             })
        if self.msg.send_message(self.socket):
            return self.rsp.read_response(self.socket)
        return None

    def send_message(self, user, message):
        self.msg.compose('msg', msg_to=user, msg_from=self.user, msg=message)
        if self.msg.send_message(self.socket):
            response = self.rsp.read_response(self.socket)
            if user.startswith('#'):
                msg = JimMessage()
                msg.read_message(self.socket)
            return response
        return None

    def reading_loop(self):
        msg = JimMessage()
        while True:
            data = msg.read_message(self.socket)
            print(data)
예제 #9
0
 def test_quit(self):
     msg = JimMessage()
     msg.compose('quit')
     assert msg.encode() == {'action': 'quit', 'time': int(time.time())}
예제 #10
0
 def test_probe(self):
     msg = JimMessage()
     msg.compose('probe')
     assert msg.encode() == {'action': 'probe', 'time': int(time.time())}
예제 #11
0
 def reading_loop(self):
     msg = JimMessage()
     while True:
         data = msg.read_message(self.socket)
         print(data)
예제 #12
0
 def test_probe(self):
     msg = JimMessage()
     msg.compose('probe')
     self.assertEqual(msg.encode(), {'action': 'probe', 'time': int(time.time())})
예제 #13
0
 def test_join(self):
     msg = JimMessage()
     msg.compose('join', room='#chatroom')
     self.assertEqual(msg.encode(), {'action': 'join', 'time': int(time.time()), 'room': '#chatroom'})
예제 #14
0
 def test_quit(self):
     msg = JimMessage()
     msg.compose('quit')
     self.assertEqual(msg.encode(), {'action': 'quit', 'time': int(time.time())})