private void SocketMessageReceived(MqttNetEventArgs args) { if (args.Message != null) { Logger.LogMessage("Protocol", LogLevel.Verbose, "Protocol notified of message received " + args.Message.MessageType + " Client Identifier=" + args.ClientUid); OnMessageReceived(args); switch (args.Message.MessageType) { case MessageType.ConnAck: args.EventData = _messageStore.Remove(args.Message, args.ClientUid); var conAck = args.Message as MqttConnectAckMessage; if (conAck != null && conAck.ConnectReturnCode != ConnectReturnCode.Accepted) { Socket.Disconnect(args.ClientUid); } FireConnectComplete(args); break; case MessageType.SubAck: args.EventData = _messageStore.Remove(args.Message, args.ClientUid); FireSubscribeMessageComplete(args); break; case MessageType.PubAck: case MessageType.PubComp: case MessageType.UnsubAck: args.EventData = _messageStore.Remove(args.Message, args.ClientUid); FireSendMessageComplete(args); break; case MessageType.Publish: DoClientPublishWorkflow(args); break; case MessageType.PubRec: DoClientPublishRecWorkflow(args); break; case MessageType.PubRel: DoClientPubRelWorkflow(args); break; case MessageType.PingResp: args.EventData = _messageStore.Remove(args.Message, args.ClientUid); FireSendMessageComplete(args); break; } } else if (args.Exception != null) { Logger.LogException("Protocol", LogLevel.Verbose, "Exception occured while receiving message from server.", args.Exception); } }