Ejemplo n.º 1
0
        /// <summary>
        /// Sends a message of the specified type, with an optional data payload.
        /// </summary>
        /// <param name="type"></param>
        /// <param name="data"></param>
        /// <returns></returns>
        private byte[] SendMessage(PacketType type, byte[] data)
        {
            // send the message
            var stream = this.TcpClient.GetStream();
            var length = (byte)0;

            if (data != null)
            {
                length += (byte)data.Length;
            }
            stream.WriteByte((byte)type);
            stream.WriteByte(length);
            if (data != null)
            {
                stream.Write(data, 0, data.Length);
            }
            stream.Flush();
            // read the response
            var result = default(byte[]);

            length = (byte)stream.ReadByte();
            if (length > 0)
            {
                result = PiFaceTcpHelper.ReadBytes(stream, length);
            }
            return(result);
        }
Ejemplo n.º 2
0
        private void ProcessMessage(NetworkStream stream)
        {
            // read the next message type
            var type = (PacketType)stream.ReadByte();
            // read the byte count
            var dataLength = (byte)stream.ReadByte();
            // read the message data
            var data = (byte[])null;

            if (dataLength > 0)
            {
                data = PiFaceTcpHelper.ReadBytes(stream, dataLength);
            }
            // process the message
            var result = new List <Byte>();

            switch (type)
            {
            case PacketType.GetOutputPinState:
                var state = this.PiFaceDevice.GetOutputPinState(data[0]);
                result.Add((byte)(state ? 0 : 1));
                break;

            case PacketType.GetOutputPinStates:
                result.Add(this.PiFaceDevice.GetOutputPinStates());
                break;

            case PacketType.SetOutputPinState:
                this.PiFaceDevice.SetOutputPinState(data[0], (data[1] != 0));
                break;

            case PacketType.SetOutputPinStates:
                this.PiFaceDevice.SetOutputPinStates(data[0]);
                break;

            case PacketType.GetInputPinStates:
                result.Add(this.PiFaceDevice.GetInputPinStates());
                break;

            case PacketType.SetInputPinState:
                this.PiFaceDevice.SetInputPinState(data[0], (data[1] != 0));
                break;

            case PacketType.SetInputPinStates:
                this.PiFaceDevice.SetInputPinStates(data[0]);
                break;

            default:
                throw new System.InvalidOperationException();
            }
            // write the result
            stream.WriteByte((byte)result.Count);
            if (result.Count > 0)
            {
                stream.Write(result.ToArray(), 0, result.Count);
            }
            stream.Flush();
        }
Ejemplo n.º 3
0
        private void ProcessMessage(Stream stream)
        {
            // read the next message type
            var type = (PacketType)stream.ReadByte();
            // read the byte count
            var dataLength = (byte)stream.ReadByte();
            // read the message data
            var data = default(byte[]);

            if (dataLength > 0)
            {
                data = PiFaceTcpHelper.ReadBytes(stream, dataLength);
            }
            this.OnMessageReceived(new MessageReceivedEventArgs(type, data));
            // process the message
            var result = new List <Byte>();

            switch (type)
            {
            case PacketType.GetOutputPinState:
            {
                var state = this.PiFaceDevice.GetOutputPinState(data[0]);
                result.Add((byte)(state ? 0 : 1));
                break;
            }

            case PacketType.GetOutputPinStates:
                result.Add(this.PiFaceDevice.GetOutputPinStates());
                break;

            case PacketType.SetOutputPinState:
                this.PiFaceDevice.SetOutputPinState(data[0], (data[1] != 0));
                break;

            case PacketType.SetOutputPinStates:
                this.PiFaceDevice.SetOutputPinStates(data[0]);
                break;

            case PacketType.GetInputPinState:
            {
                var state = this.PiFaceDevice.GetInputPinState(data[0]);
                result.Add((byte)(state ? 0 : 1));
                break;
            }

            case PacketType.GetInputPinStates:
                result.Add(this.PiFaceDevice.GetInputPinStates());
                break;

            case PacketType.SetInputPinState:
                this.PiFaceDevice.SetInputPinState(data[0], (data[1] != 0));
                break;

            case PacketType.SetInputPinStates:
                this.PiFaceDevice.SetInputPinStates(data[0]);
                break;

            default:
                throw new InvalidOperationException();
            }
            // write the result
            data = result.ToArray();
            stream.WriteByte((byte)result.Count);
            if (result.Count > 0)
            {
                stream.Write(data, 0, result.Count);
            }
            stream.Flush();
            this.OnResponseSent(new ResponseSentEventArgs(data));
        }