public async Task PublishAsync(string resourceUriString, string contentType, byte[] payload, bool confirmable, Action <CodeType, string, byte[]> action) { if (!channel.IsConnected) { await ConnectAsync(); } session.UpdateKeepAliveTimestamp(); byte[] token = CoapToken.Create().TokenBytes; ushort id = session.CoapSender.NewId(token, null, action); string scheme = channel.IsEncrypted ? "coaps" : "coap"; string coapUriString = GetCoapUriString(scheme, resourceUriString); RequestMessageType mtype = confirmable ? RequestMessageType.Confirmable : RequestMessageType.NonConfirmable; CoapRequest cr = new CoapRequest(id, mtype, MethodType.POST, token, new Uri(coapUriString), MediaTypeConverter.ConvertToMediaType(contentType), payload); queue.Enqueue(cr.Encode()); while (queue.Count > 0) { byte[] message = queue.Dequeue(); Task t = channel.SendAsync(message); await Task.WhenAll(t); } }
private void ResponseSocketReceiveReady(object sender, NetMQSocketEventArgs e) { var message = e.Socket.ReceiveMultipartMessage(2); if (message.FrameCount < 1) { logger.Error("Messages Server: Received corrupted message."); return; } RequestMessageType type = (RequestMessageType)BitConverter.ToInt16(message[0].Buffer, 0); int strategyId = BitConverter.ToInt32(message[1].Buffer, 0); switch (type) { case RequestMessageType.InstrumentRequest: NewInstrumentContractRequested(strategyId); break; case RequestMessageType.AccountRequest: AccountRequest(strategyId); break; default: break; } }
/// <summary> /// 根据请求消息类型得到一个对应的格式化器。 /// </summary> /// <param name="requestMessageType">请求消息类型。</param> /// <returns>一个可用消息格式化器。</returns> /// <exception cref="NotSupportedException">请求消息的类型不被支持。</exception> public IMessageFormatter GetFormatter(RequestMessageType requestMessageType) { var formatter = RequestMessageFormatterDictionary[requestMessageType]; if (formatter == null) throw new NotSupportedException(string.Format("不支持的请求消息类型:{0}。", requestMessageType)); return formatter; }
public static byte[] ConvertToCoap(CoapSession session, EventMessage message, byte[] observableToken = null) { CoapMessage coapMessage = null; CoapToken token = CoapToken.Create(); ushort id = observableToken == null?session.CoapSender.NewId(token.TokenBytes) : session.CoapSender.NewId(observableToken); string uriString = CoapUri.Create(session.Config.Authority, message.ResourceUri, IsEncryptedChannel); if (message.Protocol == ProtocolType.MQTT) { MqttMessage msg = MqttMessage.DecodeMessage(message.Message); PublishMessage pub = msg as PublishMessage; MqttUri uri = new MqttUri(pub.Topic); if (observableToken == null) { RequestMessageType messageType = msg.QualityOfService == QualityOfServiceLevelType.AtMostOnce ? RequestMessageType.NonConfirmable : RequestMessageType.Confirmable; //request coapMessage = new CoapRequest(id, messageType, MethodType.POST, new Uri(uriString), MediaTypeConverter.ConvertToMediaType(message.ContentType)); } else { //response coapMessage = new CoapResponse(id, ResponseMessageType.NonConfirmable, ResponseCodeType.Content, observableToken, MediaTypeConverter.ConvertToMediaType(uri.ContentType), msg.Payload); } } else if (message.Protocol == ProtocolType.COAP) { CoapMessage msg = CoapMessage.DecodeMessage(message.Message); if (observableToken == null) { //request coapMessage = new CoapRequest(id, msg.MessageType == CoapMessageType.Confirmable ? RequestMessageType.Confirmable : RequestMessageType.NonConfirmable, MethodType.POST, new Uri(uriString), MediaTypeConverter.ConvertToMediaType(message.ContentType), msg.Payload); } else { //response coapMessage = new CoapResponse(id, ResponseMessageType.NonConfirmable, ResponseCodeType.Content, observableToken, MediaTypeConverter.ConvertToMediaType(message.ContentType), msg.Payload); } } else { if (observableToken == null) { //request coapMessage = new CoapRequest(id, RequestMessageType.NonConfirmable, MethodType.POST, new Uri(uriString), MediaTypeConverter.ConvertToMediaType(message.ContentType), message.Message); } else { //response coapMessage = new CoapResponse(id, ResponseMessageType.NonConfirmable, ResponseCodeType.Content, observableToken, MediaTypeConverter.ConvertToMediaType(message.ContentType), message.Message); } } return(coapMessage.Encode()); }
/// <summary> /// 根据请求消息类型得到一个对应的格式化器。 /// </summary> /// <param name="requestMessageType">请求消息类型。</param> /// <returns>一个可用消息格式化器。</returns> /// <exception cref="NotSupportedException">请求消息的类型不被支持。</exception> public IMessageFormatter GetFormatter(RequestMessageType requestMessageType) { var formatter = RequestMessageFormatterDictionary[requestMessageType]; if (formatter == null) { throw new NotSupportedException(string.Format("不支持的请求消息类型:{0}。", requestMessageType)); } return(formatter); }
public CoapRequest(ushort messageId, RequestMessageType type, MethodType method, byte[] token, Uri resourceUri, MediaType?contentType, byte[] payload) : base() { this.MessageId = messageId; this.RequestType = type; this.Method = method; this.Token = token; this.ResourceUri = resourceUri; this.ContentType = contentType; this.Payload = payload; }
public CoapRequest(ushort messageId, RequestMessageType type, MethodType method, byte[] token, Uri resourceUri, MediaType?contentType, byte[] payload) { MessageId = messageId; RequestType = type; Method = method; Token = token; ResourceUri = resourceUri; ContentType = contentType; Payload = payload; }
public async Task UnsubscribeAsync(string resourceUriString, bool confirmable, Action <CodeType, string, byte[]> action) { if (!channel.IsConnected) { await ConnectAsync(); } session.UpdateKeepAliveTimestamp(); byte[] token = CoapToken.Create().TokenBytes; ushort id = session.CoapSender.NewId(token, null, action); string scheme = channel.IsEncrypted ? "coaps" : "coap"; string coapUriString = GetCoapUriString(scheme, config.Authority, resourceUriString); RequestMessageType mtype = confirmable ? RequestMessageType.Confirmable : RequestMessageType.NonConfirmable; CoapRequest cr = new CoapRequest(id, mtype, MethodType.DELETE, token, new Uri(coapUriString), null); await channel.SendAsync(cr.Encode()); }
public override void Decode(byte[] message) { int index = 0; byte header = message[index++]; if (header >> 0x06 != 1) { throw new CoapVersionMismatchException("Coap Version 1 is only supported version for Coap request."); } RequestType = (RequestMessageType)Convert.ToInt32((header >> 0x04) & 0x03); TokenLength = Convert.ToByte(header & 0x0F); Method = (MethodType)message[index++]; MessageId = (ushort)((message[index++] << 0x08) | message[index++]); byte[] tokenBytes = new byte[TokenLength]; Buffer.BlockCopy(message, index, tokenBytes, 0, TokenLength); Token = tokenBytes; index += TokenLength; int previous = 0; bool marker = (message[index] & 0xFF) == 0xFF; while (!marker) { int delta = message[index] >> 0x04; CoapOption CoapOption = CoapOption.Decode(message, index, previous, out index); Options.Add(CoapOption); previous += delta; marker = (message[index] & 0xFF) == 0xFF; } if (marker) { index++; Payload = new byte[message.Length - index]; Buffer.BlockCopy(message, index, Payload, 0, Payload.Length); } ReadOptions(this); }
// ReSharper disable PossibleNullReferenceException public static NormalRequestMessage Parse(XElement xml, RequestMessageType type) { NormalRequestMessage result = null; switch (type) { case RequestMessageType.text: result = new TextRequestMessage(xml); break; case RequestMessageType.image: result = new ImageRequestMessage(xml); break; case RequestMessageType.voice: result = new VoiceRequestMessage(xml); break; case RequestMessageType.video: result = new VideoRequestMessage(xml); break; case RequestMessageType.shortvideo: result = new ShortVideoRequestMessage(xml); break; case RequestMessageType.location: result = new LocationRequestMessage(xml); break; case RequestMessageType.link: result = new LinkRequestMessage(xml); break; default: throw new ArgumentOutOfRangeException(); } return(result); }
public RequestMessageWrapper(int messageId, IMessage messageBody, RequestMessageType requestType = RequestMessageType.ASYNC) { this.m_messageBody = messageBody; this.m_messageId = messageId; this.m_requestType = requestType; }
public RequestDomainBasic(RequestMessageType msgType) { this.MsgType = msgType; }
public CoapRequest(ushort messageId, RequestMessageType type, MethodType method, byte[] token, Uri resourceUri, MediaType?contentType) : this(messageId, type, method, token, resourceUri, contentType, null) { }
public CoapRequest(ushort messageId, RequestMessageType type, MethodType method, Uri resourceUri, MediaType?contentType, byte[] payload) : this(messageId, type, method, null, resourceUri, contentType, payload) { }
public override string ToString() { return(RequestMessageType.ToString() + " / " + ResponseMessageType.ToString()); }