Last active
October 27, 2020 17:26
-
-
Save saroar/9c245201a1c4c0e717f8f0fbd76761c7 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
final class WebsocketClients { | |
let lock: Lock | |
var eventLoop: EventLoop | |
var allCliendts: [ObjectId: WebSocketClient] | |
let logger: Logger | |
func send(_ msg: Message.Item, req: Request) { | |
let chatClients = self.activeClients.compactMap { $0 as? ChatClient } | |
for client in chatClients where client.id != msg.sender!.id { | |
client.send(msg, req) | |
} | |
// should i move here | |
} | |
} | |
final class ChatClient: WebSocketClient, Hashable { | |
let logger: Logger = Logger(label: "ChatClient") | |
override init(id: ObjectId, socket: WebSocket) { | |
super.init(id: id, socket: socket) | |
} | |
.... | |
// here i am creating multiple time msg | |
// if 3 uesr connect in chat room then in database create msg 3 time | |
func send(_ message: Message.Item, _ req: Request) { | |
guard req.loggedIn != false else { | |
logger.error("\(#line) Unauthorized send message") | |
return | |
} | |
///todo: will not create msg if messageBody will empty " " <- | |
let messageCreate = Message(message, senderId: req.payload.userId, receipientId: nil) | |
req.db.withConnection { _ in | |
messageCreate.save(on: req.db) | |
}.whenComplete { [self] res in | |
let success: Bool | |
switch res { | |
case .failure(let err): | |
self.logger.report(error: err) | |
success = false | |
case .success: | |
self.logger.info("success true") | |
success = true | |
} | |
messageCreate.isDelivered = success | |
messageCreate.update(on: req.db) | |
Message.query(on: req.db) | |
.with(\.$sender) | |
.with(\.$recipient) | |
.filter(\.$id == messageCreate.id!) | |
.first() | |
.unwrap(or: Abort(.notFound, reason: "No Message found! by id: \(id)")) | |
.map { original in | |
let message = ChatOutGoingEvent.message(original.response).jsonString | |
let lastMessage = ChatOutGoingEvent.conversation(original.response).jsonString | |
logger.info("\(#line): \(message)") | |
self.socket.send(message ?? "") | |
self.socket.send(lastMessage ?? "") | |
// if let msgJsonString = original.response.jsonString { | |
// logger.info("\(#line): \(original)") | |
// } | |
} | |
} | |
} | |
... | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment