예제 #1
0
        /// <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));
        }
예제 #2
0
        /// <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);
        }
예제 #3
0
        /// <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);
        }
예제 #4
0
 /// <summary>
 /// Constructor
 /// </summary>
 /// <param name="messageType">Message Type</param>
 /// <param name="data">Data</param>
 public TuringMessage(ETuringMessageType messageType)
 {
     Type = messageType;
 }