コード例 #1
0
        public override async Task Run(IDictionary <object, object> parameters)
        {
            if (!int.TryParse(Match.Groups["after"].Value, out var _delay))
            {
                _delay = 1;
            }
            var _trigger = Match.Groups["trigger"].Value;

            await(string.IsNullOrEmpty(_trigger) ? Task.Delay(_delay) : ((Trigger)parameters[typeof(Trigger)]).WaitAsync(_trigger));

            var _server = ((ISocketServer)parameters[typeof(ISocketServer)]);
            var _type   = Match.Groups["type"].Value;

            switch (_type)
            {
            case ReceiveMessage.SubscribeType:
            {
                var _path       = GetArg <string>(0);
                var _statusCode = GetArg <ReceiveMessageStatusCode>(1);
                _server.Send(MessageEncoding.GetBytes(JsonSerializer.Serialize(ReceiveMessage.Subscribe(_path, _statusCode))));
                break;
            }

            case ReceiveMessage.UnsubscribeType:
            {
                var _path       = GetArg <string>(0);
                var _statusCode = GetArg <ReceiveMessageStatusCode>(1);
                _server.Send(MessageEncoding.GetBytes(JsonSerializer.Serialize(ReceiveMessage.Unsubscribe(_path, _statusCode))));
                break;
            }

            case ReceiveMessage.ChangedType:
            {
                var _configKeys = GetArg <IEnumerable <ConfigKey> >(0);
                _server.Send(MessageEncoding.GetBytes(JsonSerializer.Serialize(ReceiveMessage.Changed(_configKeys))));
                break;
            }

            case ReceiveMessage.DeletedType:
            {
                var _path = GetArg <string>(0);
                _server.Send(MessageEncoding.GetBytes(JsonSerializer.Serialize(ReceiveMessage.Deleted(_path))));
                break;
            }

            default:
            {
                var _closeStatus = int.Parse(Match.Groups["ccode"].Value);
                _server.Send(_closeStatus);
                break;
            }
            }

            ((Trigger)parameters[typeof(Trigger)]).Release(Match.Groups["release"].Value);
        }
コード例 #2
0
ファイル: PlainEnvelope.cs プロジェクト: radtek/SocketServer
        public override void Serialize(IMessage message, Stream stream)
        {
            PlainMessage  msg = message as PlainMessage;
            StringBuilder str = new StringBuilder();

            str.Append(msg.Name);
            str.Append("\r\n");
            byte[] nameBytes = MessageEncoding.GetBytes(str.ToString());
            stream.Write(nameBytes, 0, nameBytes.Length);
            message.Serialize(stream, MessageEncoding);
            stream.Flush();
        }
コード例 #3
0
 private void OnPublishMessage(string message)
 {
     try
     {
         var msg = new MqttApplicationMessage()
         {
             Topic   = PublishTopic,
             Payload = MessageEncoding.GetBytes(message),
             QualityOfServiceLevel = MqttQualityOfServiceLevel.ExactlyOnce,
             Retain = false
         };
         _mqttClient?.PublishAsync(msg);
     }
     catch (Exception e)
     {
         OnErrorMessage?.Invoke(e.Message);
     }
 }
コード例 #4
0
ファイル: PlainEnvelope.cs プロジェクト: radtek/SocketServer
        public override void Serialize(object message, Stream stream)
        {
            string typeName = message.GetType().AssemblyQualifiedName;

            StringBuilder str = new StringBuilder();

            str.AppendFormat("{0}\r\n", typeName);

            byte[] nameBytes = MessageEncoding.GetBytes(str.ToString());
            stream.Write(nameBytes, 0, nameBytes.Length);

            MemoryStream memoryStream = new MemoryStream();

            Serializer.NonGeneric.Serialize(memoryStream, message);

            byte[] data = memoryStream.ToArray();
            stream.Write(data.Length.Serialize());
            stream.Write(data);
            stream.Flush();
        }
コード例 #5
0
        /// <summary>
        /// 异步连接MQTT
        /// </summary>
        /// <returns></returns>
        private async Task ConnectAsync()
        {
            // create client instance
            _mqttClient = new MqttFactory().CreateMqttClient() as MqttClient;
            if (_mqttClient == null)
            {
                return;
            }

            _mqttClient.ApplicationMessageReceivedHandler =
                new MqttApplicationMessageReceivedHandlerDelegate(e => { OnMessageReceived(e); });
            _mqttClient.ConnectedHandler    = new MqttClientConnectedHandlerDelegate(e => { OnMqttConnected(); });
            _mqttClient.DisconnectedHandler =
                new MqttClientDisconnectedHandlerDelegate(e => { OnMqttDisconnected(); });

            try
            {
                var willMsg = new MqttApplicationMessage()
                {
                    Topic   = PublishTopic,
                    Payload = MessageEncoding.GetBytes(WillMessage ?? string.Empty),
                    QualityOfServiceLevel = MqttQualityOfServiceLevel.ExactlyOnce,
                    Retain = false
                };

                var options = new MqttClientOptionsBuilder()
                              .WithTcpServer(BrokerAddress, BrokerPort)
                              .WithCredentials(BrokerUserName, BrokerPassword)
                              .WithClientId(_clientId)
                              .WithWillMessage(willMsg)
                              .WithCleanSession()
                              .Build();

                await _mqttClient.ConnectAsync(options);
            }
            catch (Exception e)
            {
                MqttConnected = false;
                OnErrorMessage?.Invoke(e.Message);
            }
        }
コード例 #6
0
 public void SetDelimiter(string delimiter)
 {
     SetDelimiter(MessageEncoding.GetBytes(delimiter));
 }
コード例 #7
0
 public ArraySegment <byte> GetBinary()
 {
     return(new ArraySegment <byte>(MessageEncoding.GetBytes(JsonSerializer.Serialize(this))));
 }