class ConnectionManager:
async def connect(self, websocket: WebSocket, useremail: str):
await websocket.accept()
activeConnection[useremail] = websocket
# Send pending messages if any
if useremail in pendingmessages:
messages = pendingmessages[useremail]
for message in messages:
try:
await websocket.send_json(message)
if len(pendingmessages[useremail]) > 0:
pendingmessages[useremail].remove(message)
else:
del pendingmessages[useremail]
except RuntimeError:
self.disconnect(useremail)
def disconnect(self, email: str):
activeConnection.pop(email)
async def sendmessage(self, msgdata: Any, receiveremail: str):
if receiveremail in activeConnection:
websocket = activeConnection[receiveremail]
try:
await websocket.send_json(msgdata)
except RuntimeError:
self.disconnect(receiveremail)
pendingmessages[receiveremail].append(msgdata)
else:
if receiveremail not in pendingmessages:
pendingmessages[receiveremail] = []
pendingmessages[receiveremail].append(msgdata)
connection = ConnectionManager()
@app.websocket("/chats/")
async def websocket_endpoint(websocket: WebSocket, email: str):
await connection.connect(websocket, email)
try:
while True:
msg_data = await websocket.receive_json()
receiver_email = str(msg_data["receiverEmail"])
print(f'new message received from {receiver_email}')
await connection.sendmessage(msg_data, receiver_email)
except WebSocketDisconnect:
connection.disconnect(email)
когда пользователь a отправляет сообщение, а пользователь b находится в автономном режиме, предположим, что пользователь a отправил 20 сообщений пользователю b, и теперь от пользователя a оно отправляется на сервер и сохраняется на сервере, когда пользователь b выходит в Интернет, затем пользователь b получает только несколько сообщений, я пытался использовать очередь Android, но проблема все та же, поэтому я напрямую распечатал полученное сообщение в журнале, приходит только несколько сообщений, как исправить
**мой код на Kotlin** [code] class Listener( val onMessage: (String) -> Unit, val onClosed: () -> Unit, val onFail: (String) -> Unit, val onOpen: (WebSocket) -> Unit, val onClosing: () -> Unit ) : WebSocketListener() { override fun onOpen(webSocket: WebSocket, response: Response) { super.onOpen(webSocket, response) onOpen(webSocket) }
override fun onMessage(webSocket: WebSocket, text: String) { super.onMessage(webSocket, text) Log.d("websocket", "new message") onMessage(text) }
# Send pending messages if any if useremail in pendingmessages: messages = pendingmessages[useremail] for message in messages: try: await websocket.send_json(message) if len(pendingmessages[useremail]) > 0: pendingmessages[useremail].remove(message) else: del pendingmessages[useremail]
[/code] когда пользователь a отправляет сообщение, а пользователь b находится в автономном режиме, предположим, что пользователь a отправил 20 сообщений пользователю b, и теперь от пользователя a оно отправляется на сервер и сохраняется на сервере, когда пользователь b выходит в Интернет, затем пользователь b получает только несколько сообщений, я пытался использовать очередь Android, но проблема все та же, поэтому я напрямую распечатал полученное сообщение в журнале, приходит только несколько сообщений, как исправить