@@ -15,8 +15,8 @@ class Message(Namespace): # 聊天功能
1515 def on_connect (self ):
1616 token = request .headers .get ('Authorization' )
1717 if user_id := self .verify_token (token ):
18- join_room (user_id ) # 将用户添加到以其唯一标识符命名的房间
19- emit ('response' , {'code' : 1 , 'message' : '连接成功' })
18+ join_room (f' { user_id } ' ) # 将用户添加到以其唯一标识符命名的房间
19+ emit ('response' , {'code' : 1 , 'message' : '新消息来咯!' , 'user_id' : str ( user_id )}) # 发送消息给连接的用户
2020 self .send_offline_messages (user_id )
2121 else :
2222 emit ('response' , {'code' : 0 , 'message' : '你没有权限' })
@@ -35,19 +35,28 @@ def on_message(self, messages):
3535 token = request .headers .get ('Authorization' )
3636 if sender_id := self .verify_token (token ):
3737 messages_dict = json .loads (messages )
38- receive_id = messages_dict .get ('receive_id' ) # 获取消息的接收者的唯一标识符
39- message_type = messages_dict .get ('type' ) # 获取消息类型
40- message = messages_dict .get ('message' ) # 获取消息内容
41- messages = Messages (id = id_generate ('message' ), isSystem = 0 , send_id = sender_id , receive_id = receive_id ,
42- message = message , send_time = datetime .datetime .utcnow (), type = message_type , is_read = 0 )
43- db .session .add (messages )
44- db .session .flush ()
45- db .session .commit ()
46- emit ('response' , {'code' : 200 , 'message' : message , 'message_id' : str (messages .id ), 'type' : message_type },
47- room = receive_id ) # 发送消息给接收者的房间
38+ try :
39+ receive_id = messages_dict .get ('receive_id' ) # 获取消息的接收者的唯一标识符
40+ message_type = messages_dict .get ('type' ) # 获取消息类型
41+ message = messages_dict .get ('message' ) # 获取消息内容
42+ messages = Messages (id = id_generate ('message' ), isSystem = 0 , send_id = sender_id , receive_id = receive_id ,
43+ message = message , send_time = datetime .datetime .utcnow (), type = message_type , is_read = 0 )
44+ db .session .add (messages )
45+ db .session .flush ()
46+ db .session .commit ()
47+ if str (sender_id ) != receive_id :
48+ emit ('response' ,
49+ {'code' : 200 , 'message' : message , 'send_id' : str (sender_id ), 'receive_id' : str (receive_id ),
50+ 'message_id' : str (messages .id ), 'type' : message_type ,
51+ 'send_time' : time_transform (messages .send_time , True )},
52+ room = f'{ receive_id } ' ) # 发送消息给接收者的房间
4853
49- emit ('response' , {'code' : 200 , 'message' : message , 'message_id' : str (messages .id ), 'type' : message_type },
50- room = sender_id ) # 发送消息给发送者的房间
54+ # emit('response',
55+ # {'code': 200, 'message': message, 'send_id': str(sender_id), 'receive_id': str(receive_id),
56+ # 'message_id': str(messages.id), 'type': message_type},
57+ # room=f'{sender_id}') # 发送消息给发送者的房间
58+ except Exception as e :
59+ emit ('response' , {'code' : 400 , 'message' : f'发送失败:{ e } ' })
5160 else :
5261 emit ('response' , {'code' : 400 , 'message' : '你没有权限' })
5362
@@ -72,13 +81,18 @@ def verify_token(self, token):
7281 return False
7382
7483 def send_offline_messages (self , receive_id ):
75- # 查询数据库中针对接收者的未读消息
76- offline_messages = Messages .query .filter_by (receive_id = receive_id , is_read = 0 ).filter (
84+ # 查询未读消息
85+ offline_messages_receive = Messages .query .filter_by (receive_id = receive_id , is_read = 0 ).filter (
7786 Messages .send_id != 6 ).all ()
78-
87+ offline_messages_send = Messages .query .filter_by (send_id = receive_id , is_read = 0 ).filter (
88+ Messages .send_id != 6 ).all ()
89+ offline_messages = list (set (offline_messages_receive + offline_messages_send ))
90+ offline_messages = sorted (offline_messages , key = lambda x : x .send_time )
7991 # 将未读消息发送给接收者
8092 for message in offline_messages :
8193 emit ('response' ,
82- {'code' : 200 , 'message' : message .message , 'send_id' : str (message .send_id ), 'type' : message .type ,
83- 'message_id' : str (message .id ), 'send_time' : time_transform (message .send_time )},
84- room = receive_id )
94+ {'code' : 200 , 'message' : message .message , 'send_id' : str (message .send_id ),
95+ 'receive_id' : str (message .receive_id ),
96+ 'type' : message .type , 'message_id' : str (message .id ),
97+ 'send_time' : time_transform (message .send_time , True )},
98+ room = f'{ receive_id } ' )
0 commit comments