@@ -135,17 +135,31 @@ std::string WebSocketSession::GetRemoteAddress() const {
135135}
136136
137137void WebSocketSession::OnMessage (const WebSocketProtocol::WebSocketMessage& msg) {
138- if (messageHandler_ ) {
139- if (msg. opcode == WebSocketProtocol::OP_TEXT ) {
138+ if (msg. opcode == WebSocketProtocol::OP_TEXT ) {
139+ if (messageHandler_ ) {
140140 try {
141141 auto json = nlohmann::json::parse (msg.GetText ());
142142 messageHandler_ (json);
143143 } catch (const std::exception& e) {
144144 Logger::Error (" WebSocketSession: invalid JSON: {}" , e.what ());
145145 }
146- } else if (msg.opcode == WebSocketProtocol::OP_BINARY) {
147- // Binary message handling – can be extended to parse binary protocol
148- Logger::Debug (" WebSocket binary message received, size: {}" , msg.data .size ());
146+ }
147+ } else if (msg.opcode == WebSocketProtocol::OP_BINARY) {
148+ // Deserialize as BinaryMessage
149+ try {
150+ auto binaryMsg = BinaryProtocol::BinaryMessage::Deserialize (
151+ msg.data .data (), msg.data .size ());
152+ if (binary_handler_) {
153+ binary_handler_ (binaryMsg.header .message_type , binaryMsg.data );
154+ } else if (default_binary_handler_) {
155+ default_binary_handler_ (binaryMsg.header .message_type , binaryMsg.data );
156+ } else {
157+ Logger::Warn (" WebSocketSession {}: no binary handler for message type {}" ,
158+ sessionId_, binaryMsg.header .message_type );
159+ }
160+ } catch (const std::exception& e) {
161+ Logger::Error (" WebSocketSession {}: failed to deserialize binary message: {}" ,
162+ sessionId_, e.what ());
149163 }
150164 }
151165}
@@ -155,4 +169,12 @@ void WebSocketSession::OnClose(uint16_t code, const std::string& reason) {
155169 if (closeHandler_) {
156170 closeHandler_ ();
157171 }
158- }
172+ }
173+
174+ void WebSocketSession::SetBinaryMessageHandler (BinaryMessageHandler handler) {
175+ binary_handler_ = std::move (handler);
176+ }
177+
178+ void WebSocketSession::SetDefaultBinaryMessageHandler (BinaryMessageHandler handler) {
179+ default_binary_handler_ = std::move (handler);
180+ }
0 commit comments