/// <summary> /// Routes message to it's type handler /// </summary> private async Task RouteToHandler(MqClient mc, TmqMessage message, IConnectionInfo info) { switch (message.Type) { //client sends a queue message in a channel case MessageType.Channel: await _instanceHandler.Handle(mc, message); await _channelHandler.Handle(mc, message); break; //clients sends a message to another client case MessageType.Client: await _instanceHandler.Handle(mc, message); await _clientHandler.Handle(mc, message); break; //client sends an acknowledge message of a message case MessageType.Acknowledge: await _instanceHandler.Handle(mc, message); await _acknowledgeHandler.Handle(mc, message); break; //client sends a response message for a message case MessageType.Response: await _instanceHandler.Handle(mc, message); await _responseHandler.Handle(mc, message); break; //client sends a message to the server //this message may be join, header, info, some another server message case MessageType.Server: await _serverHandler.Handle(mc, message); break; //if client sends a ping message, response with pong case MessageType.Ping: await mc.SendAsync(PredefinedMessages.PONG); break; //client sends PONG message case MessageType.Pong: mc.KeepAlive(); break; //close the client's connection case MessageType.Terminate: mc.Disconnect(); break; } }
/// <summary> /// Routes message to it's type handler /// </summary> internal Task RouteToHandler(MqClient mc, HorseMessage message, bool fromNode) { switch (message.Type) { //client sends a queue message case MessageType.QueueMessage: if (!fromNode) { _ = _instanceHandler.Handle(mc, message, false); } return(_queueMessageHandler.Handle(mc, message, fromNode)); case MessageType.Router: if (!fromNode) { _ = _instanceHandler.Handle(mc, message, false); } return(_routerMessageHandler.Handle(mc, message, fromNode)); //sends pull request to a queue case MessageType.QueuePullRequest: return(_pullRequestHandler.Handle(mc, message, fromNode)); //clients sends a message to another client case MessageType.DirectMessage: if (!fromNode) { _ = _instanceHandler.Handle(mc, message, false); } return(_clientHandler.Handle(mc, message, fromNode)); //client sends a response message for a message case MessageType.Response: if (!fromNode) { _ = _instanceHandler.Handle(mc, message, false); } return(_responseHandler.Handle(mc, message, fromNode)); //client sends a message to the server //this message may be join, header, info, some another server message case MessageType.Server: return(_serverHandler.Handle(mc, message, fromNode)); //event subscription or unsubscription request received case MessageType.Event: return(_eventHandler.Handle(mc, message, fromNode)); //if client sends a ping message, response with pong case MessageType.Ping: return(mc.SendAsync(PredefinedMessages.PONG)); //client sends PONG message case MessageType.Pong: mc.KeepAlive(); break; //close the client's connection case MessageType.Terminate: mc.Disconnect(); break; } return(Task.CompletedTask); }