public void ConnectAsync(MqttConnectMessageBuilder bldr, string ipOrHost, int port, SocketEncryption encryption, object eventData)
        {
            var args = new SocketEventArgs
            {
                EncryptionLevel = encryption,
                ClientUid = GenerateClientUid(bldr)
            };

            args.OnOperationComplete((eventArgs) =>
            {
                OnTcpConnectAsyncCompleted(eventArgs, eventData);

                if (eventArgs.SocketException == null)
                {
                    SendMessageAsync(bldr, eventData, eventArgs.ClientUid);
                }
                else
                {
                    FireConnectComplete(new MqttNetEventArgs
                    {
                        Message = bldr.GetMessage(),
                        Exception = eventArgs.SocketException,
                        AdditionalErrorInfo = eventArgs.AdditionalErrorInfo,
                        EventData = eventData,
                        ClientUid = args.ClientUid
                    });
                }
            });

            Socket.ConnectAsync(ipOrHost, port, args);
        }
Beispiel #2
0
        public void ConnectAsync(MqttConnectMessageBuilder bldr, string ipOrHost, int port, SocketEncryption encryption, object eventData)
        {
            var args = new SocketEventArgs
            {
                EncryptionLevel = encryption,
                ClientUid       = GenerateClientUid(bldr)
            };

            args.OnOperationComplete((eventArgs) =>
            {
                OnTcpConnectAsyncCompleted(eventArgs, eventData);

                if (eventArgs.SocketException == null)
                {
                    SendMessageAsync(bldr, eventData, eventArgs.ClientUid);
                }
                else
                {
                    FireConnectComplete(new MqttNetEventArgs
                    {
                        Message             = bldr.GetMessage(),
                        Exception           = eventArgs.SocketException,
                        AdditionalErrorInfo = eventArgs.AdditionalErrorInfo,
                        EventData           = eventData,
                        ClientUid           = args.ClientUid
                    });
                }
            });

            Socket.ConnectAsync(ipOrHost, port, args);
        }
        public void SendMessageAsync(IMqttMessage msg, object eventData, string clientUid)
        {
            Logger.LogMessage("Protocol", LogLevel.Verbose, "SendMessageAsync(" + msg.MessageType + ")");

            var args = new SocketEventArgs
            {
                MessageToSend = msg,
                ClientUid = clientUid
            };

            // If we expect a response, push the event data on our stack and retrieve it with the response
            if (args.MessageToSend.ExpectedResponse != MessageType.None)
            {
                _messageStore.Add(args.MessageToSend, eventData, clientUid);
            }

            args.OnOperationComplete((eventArgs) =>
            {
                MessageType messageType = eventArgs.MessageToSend.MessageType;

                string exceptionText = eventArgs.SocketException == null
                    ? "Success."
                    : "Error: " + eventArgs.SocketException.ToString();
                Logger.LogMessage("Protocol", LogLevel.Verbose, "SendMessageAsync(" + messageType + ") completed callback. " + exceptionText);

                if (eventArgs.SocketException != null)
                {
                    // Clean up pending message queue
                    _messageStore.Remove(args.MessageToSend.ExpectedResponse, MqttMessageBase.GetMessageIdOrDefault(args.MessageToSend), clientUid);
                }

                OnSendMessageAsyncCompleted(clientUid, eventArgs.MessageToSend, eventArgs.SocketException);

                if (messageType == MessageType.Connect && eventArgs.SocketException != null)
                {
                    FireConnectComplete(new MqttNetEventArgs
                    {
                        Message = args.MessageToSend,
                        Exception = eventArgs.SocketException,
                        AdditionalErrorInfo = eventArgs.AdditionalErrorInfo,
                        EventData = eventData,
                        ClientUid = clientUid
                    });
                }
                else if (messageType == MessageType.Disconnect)
                {
                    CloseConnection(clientUid);
                    FireSendMessageComplete(new MqttNetEventArgs
                    {
                        Message = args.MessageToSend,
                        Exception = eventArgs.SocketException,
                        AdditionalErrorInfo = eventArgs.AdditionalErrorInfo,
                        EventData = eventData,
                        ClientUid = clientUid
                    });
                }
                else if (messageType == MessageType.Subscribe && eventArgs.SocketException != null)
                {
                    FireSubscribeMessageComplete(new MqttNetEventArgs
                    {
                        Message = args.MessageToSend,
                        Exception = eventArgs.SocketException,
                        AdditionalErrorInfo = eventArgs.AdditionalErrorInfo,
                        EventData = eventData,
                        ClientUid = clientUid
                    });
                }
                else if (args.MessageToSend.ExpectedResponse == MessageType.None || eventArgs.SocketException != null)
                {
                    FireSendMessageComplete(new MqttNetEventArgs
                    {
                        Message = args.MessageToSend,
                        Exception = eventArgs.SocketException,
                        AdditionalErrorInfo = eventArgs.AdditionalErrorInfo,
                        EventData = eventData,
                        ClientUid = clientUid
                    });
                }
            });

            Socket.WriteAsync(args);
        }
Beispiel #4
0
        public void SendMessageAsync(IMqttMessage msg, object eventData, string clientUid)
        {
            Logger.LogMessage("Protocol", LogLevel.Verbose, "SendMessageAsync(" + msg.MessageType + ")");

            var args = new SocketEventArgs
            {
                MessageToSend = msg,
                ClientUid     = clientUid
            };

            // If we expect a response, push the event data on our stack and retrieve it with the response
            if (args.MessageToSend.ExpectedResponse != MessageType.None)
            {
                _messageStore.Add(args.MessageToSend, eventData, clientUid);
            }

            args.OnOperationComplete((eventArgs) =>
            {
                MessageType messageType = eventArgs.MessageToSend.MessageType;

                string exceptionText = eventArgs.SocketException == null
                    ? "Success."
                    : "Error: " + eventArgs.SocketException.ToString();
                Logger.LogMessage("Protocol", LogLevel.Verbose, "SendMessageAsync(" + messageType + ") completed callback. " + exceptionText);

                if (eventArgs.SocketException != null)
                {
                    // Clean up pending message queue
                    _messageStore.Remove(args.MessageToSend.ExpectedResponse, MqttMessageBase.GetMessageIdOrDefault(args.MessageToSend), clientUid);
                }

                OnSendMessageAsyncCompleted(clientUid, eventArgs.MessageToSend, eventArgs.SocketException);

                if (messageType == MessageType.Connect && eventArgs.SocketException != null)
                {
                    FireConnectComplete(new MqttNetEventArgs
                    {
                        Message             = args.MessageToSend,
                        Exception           = eventArgs.SocketException,
                        AdditionalErrorInfo = eventArgs.AdditionalErrorInfo,
                        EventData           = eventData,
                        ClientUid           = clientUid
                    });
                }
                else if (messageType == MessageType.Disconnect)
                {
                    CloseConnection(clientUid);
                    FireSendMessageComplete(new MqttNetEventArgs
                    {
                        Message             = args.MessageToSend,
                        Exception           = eventArgs.SocketException,
                        AdditionalErrorInfo = eventArgs.AdditionalErrorInfo,
                        EventData           = eventData,
                        ClientUid           = clientUid
                    });
                }
                else if (messageType == MessageType.Subscribe && eventArgs.SocketException != null)
                {
                    FireSubscribeMessageComplete(new MqttNetEventArgs
                    {
                        Message             = args.MessageToSend,
                        Exception           = eventArgs.SocketException,
                        AdditionalErrorInfo = eventArgs.AdditionalErrorInfo,
                        EventData           = eventData,
                        ClientUid           = clientUid
                    });
                }
                else if (args.MessageToSend.ExpectedResponse == MessageType.None || eventArgs.SocketException != null)
                {
                    FireSendMessageComplete(new MqttNetEventArgs
                    {
                        Message             = args.MessageToSend,
                        Exception           = eventArgs.SocketException,
                        AdditionalErrorInfo = eventArgs.AdditionalErrorInfo,
                        EventData           = eventData,
                        ClientUid           = clientUid
                    });
                }
            });

            Socket.WriteAsync(args);
        }