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); }
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(); }
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); } }
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(); }
/// <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); } }
public void SetDelimiter(string delimiter) { SetDelimiter(MessageEncoding.GetBytes(delimiter)); }
public ArraySegment <byte> GetBinary() { return(new ArraySegment <byte>(MessageEncoding.GetBytes(JsonSerializer.Serialize(this)))); }