/// <summary> /// Reads an event message from the reader. /// </summary> /// <param name="reader"></param> /// <param name="targetDeviceId"></param> /// <param name="sourceDeviceId"></param> /// <returns></returns> internal static RnetNumberSixMessage Read(RnetMessageBodyReader reader, RnetDeviceId targetDeviceId, RnetDeviceId sourceDeviceId) { Contract.Requires<ArgumentNullException>(reader != null); return new RnetNumberSixMessage( targetDeviceId, sourceDeviceId, reader.ReadByte(), reader.ReadByte(), reader.ReadByte(), reader.ReadByte(), reader.ReadByte()); }
/// <summary> /// Reads an event message from the reader. /// </summary> /// <param name="reader"></param> /// <param name="targetDeviceId"></param> /// <param name="sourceDeviceId"></param> /// <returns></returns> internal static RnetHandshakeMessage Read(RnetMessageBodyReader reader, RnetDeviceId targetDeviceId, RnetDeviceId sourceDeviceId) { Contract.Requires<ArgumentNullException>(reader != null); var handshakeType = (RnetHandshakeType)reader.ReadByte(); return new RnetHandshakeMessage( targetDeviceId, sourceDeviceId, handshakeType); }
/// <summary> /// Reads an event message from the reader. /// </summary> /// <param name="reader"></param> /// <param name="targetDeviceId"></param> /// <param name="sourceDeviceId"></param> /// <returns></returns> internal static RnetRequestDataMessage Read(RnetMessageBodyReader reader, RnetDeviceId targetDeviceId, RnetDeviceId sourceDeviceId) { Contract.Requires<ArgumentNullException>(reader != null); var targetPath = RnetPath.Read(reader); var sourcePath = RnetPath.Read(reader); var type = (RnetRequestMessageType)reader.ReadByte(); return new RnetRequestDataMessage( targetDeviceId, sourceDeviceId, targetPath, sourcePath, type); }
/// <summary> /// Attempts to parse the given RNet message body. /// </summary> /// <param name="body"></param> /// <returns></returns> RnetMessage ParseMessage(RnetMessageBodyReader reader) { Contract.Requires<ArgumentNullException>(reader != null); try { // parse device ids var targetDeviceId = RnetDeviceId.Read(reader); var sourceDeviceId = RnetDeviceId.Read(reader); var messageType = (RnetMessageType)reader.ReadByte(); switch (messageType) { case RnetMessageType.Event: return RnetEventMessage.Read(reader, targetDeviceId, sourceDeviceId); case RnetMessageType.RequestData: return RnetRequestDataMessage.Read(reader, targetDeviceId, sourceDeviceId); case RnetMessageType.SetData: return RnetSetDataMessage.Read(reader, targetDeviceId, sourceDeviceId); case RnetMessageType.Handshake: return RnetHandshakeMessage.Read(reader, targetDeviceId, sourceDeviceId); case RnetMessageType.Number6: return RnetNumberSixMessage.Read(reader, targetDeviceId, sourceDeviceId); default: return RnetUnknownMessage.Read(reader, targetDeviceId, sourceDeviceId, messageType); } } catch (RnetException e) { ExceptionDispatchInfo.Capture(e).Throw(); } catch (Exception e) { throw new RnetProtocolException("Exception parsing RNET message.", e); } // unreachable return null; }
/// <summary> /// Reads an event message from the reader. /// </summary> /// <param name="reader"></param> /// <param name="targetDeviceId"></param> /// <param name="sourceDeviceId"></param> /// <returns></returns> internal static RnetEventMessage Read(RnetMessageBodyReader reader, RnetDeviceId targetDeviceId, RnetDeviceId sourceDeviceId) { Contract.Requires<ArgumentNullException>(reader != null); return new RnetEventMessage( targetDeviceId, sourceDeviceId, RnetPath.Read(reader), RnetPath.Read(reader), (RnetEvent)reader.ReadUInt16(), reader.ReadUInt16(), reader.ReadUInt16(), (RnetPriority)reader.ReadByte()); }