/// <summary> /// Create a message /// </summary> /// <param name="messageType">Type</param> /// <param name="buffer">Buffer</param> public static TuringMessage Create(ETuringMessageType messageType, byte[] buffer) { switch (messageType) { case ETuringMessageType.Exception: return(SerializationHelper.DeserializeFromJson <ExceptionMessage>(Encoding.UTF8.GetString(buffer))); case ETuringMessageType.EndTask: return(SerializationHelper.DeserializeFromJson <EndTaskMessage>(Encoding.UTF8.GetString(buffer))); case ETuringMessageType.OpenStreamRequest: return(SerializationHelper.DeserializeFromJson <OpenStreamMessageRequest>(Encoding.UTF8.GetString(buffer))); case ETuringMessageType.CloseStreamRequest: return(SerializationHelper.DeserializeFromJson <CloseStreamMessageRequest>(Encoding.UTF8.GetString(buffer))); case ETuringMessageType.GetStreamLengthRequest: return(SerializationHelper.DeserializeFromJson <GetStreamLengthMessageRequest>(Encoding.UTF8.GetString(buffer))); case ETuringMessageType.GetStreamPositionRequest: return(SerializationHelper.DeserializeFromJson <GetStreamPositionMessageRequest>(Encoding.UTF8.GetString(buffer))); case ETuringMessageType.SetStreamRequest: return(SerializationHelper.DeserializeFromJson <SetStreamMessageRequest>(Encoding.UTF8.GetString(buffer))); case ETuringMessageType.FlushStreamRequest: return(SerializationHelper.DeserializeFromJson <FlushStreamMessageRequest>(Encoding.UTF8.GetString(buffer))); case ETuringMessageType.ReadStreamRequest: return(SerializationHelper.DeserializeFromJson <StreamReadMessageRequest>(Encoding.UTF8.GetString(buffer))); case ETuringMessageType.WriteStreamRequest: return(SerializationHelper.DeserializeFromJson <StreamWriteMessageRequest>(Encoding.UTF8.GetString(buffer))); case ETuringMessageType.BoolResponse: return(SerializationHelper.DeserializeFromJson <BoolMessageResponse>(Encoding.UTF8.GetString(buffer))); case ETuringMessageType.LongResponse: return(SerializationHelper.DeserializeFromJson <LongMessageResponse>(Encoding.UTF8.GetString(buffer))); case ETuringMessageType.OpenStreamResponse: return(SerializationHelper.DeserializeFromJson <OpenStreamMessageResponse>(Encoding.UTF8.GetString(buffer))); case ETuringMessageType.ByteArrayResponse: return(SerializationHelper.DeserializeFromJson <ByteArrayMessageResponse>(Encoding.UTF8.GetString(buffer))); } return(new TuringMessage(messageType)); }
/// <summary> /// Check Data /// </summary> public TuringMessage CheckData(int read) { Index += read; switch (State) { case ETuringMessageState.ReadingHeader: { if (Index == TuringMessage.HeaderLength) { int length; ETuringMessageType type; if (TuringMessage.ParseHeader(Buffer, 0, TuringMessage.HeaderLength, out length, out type)) { Index = 0; Buffer = new byte[length]; MessageType = type; State = ETuringMessageState.ReadingData; if (length == 0) { Clear(); return(TuringMessage.Create(type, Buffer)); } } } break; } case ETuringMessageState.ReadingData: { if (Index == Buffer.Length) { TuringMessage ret = TuringMessage.Create(MessageType, Buffer); Clear(); return(ret); } break; } } return(null); }
/// <summary> /// Parse header message /// </summary> /// <param name="buffer">Buffer</param> /// <param name="index">Index</param> /// <param name="count">Count</param> /// <param name="length">Length</param> /// <param name="messageType">Type</param> /// <returns></returns> public static bool ParseHeader(byte[] buffer, int index, byte count, out int length, out ETuringMessageType messageType) { if (count != HeaderLength) { length = 0; messageType = ETuringMessageType.None; return(false); } length = BitHelper.ToInt32(buffer, index); messageType = (ETuringMessageType)buffer[HeaderLength - 1]; return(true); }
/// <summary> /// Constructor /// </summary> /// <param name="messageType">Message Type</param> /// <param name="data">Data</param> public TuringMessage(ETuringMessageType messageType) { Type = messageType; }