/// <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); }
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(); }
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)); }