public void recieve_buffered() { if (connection_state != ConnectionState.Connected) { return; } while (client.Available > 0) { if (recieve_state == RecieveState.Key) { if (client.Available < 3) { break; } byte[] cur_key = new byte[3]; if (client.GetStream().Read(cur_key, 0, 3) == 3) { // Got key, check it bool valid_key = true; for (int i = 0; i < 3; i++) { if (cur_key[0] != CommunicationDefinitions.key[0]) { valid_key = false; } } if (valid_key) { recieve_state = RecieveState.Header; } else { recieve_state = RecieveState.Key; } } } else if (recieve_state == RecieveState.Header) { if (client.Available < 1) { break; } if (client.GetStream().Read(recieve_buffer, 0, 1) == 1) { if (CommunicationDefinitions.PACKET_SIZES.ContainsKey((CommunicationDefinitions.TYPE)recieve_buffer[0])) { recieve_size = CommunicationDefinitions.PACKET_SIZES[(CommunicationDefinitions.TYPE)recieve_buffer[0]]; recieve_state = RecieveState.Data; } else { recieve_state = RecieveState.Key; } } } else if (recieve_state == RecieveState.Data) { if (client.Available < recieve_size) { break; } if (client.GetStream().Read(recieve_buffer, 1, recieve_size) == recieve_size) { CommunicationDefinitions.TYPE type = (CommunicationDefinitions.TYPE)recieve_buffer[0]; if (type == CommunicationDefinitions.TYPE.DATAAGGREGATOR_STATE) { StateData.dataaggregator_state.Deserialize(recieve_buffer); parent.update_indicators(); } else if (type == CommunicationDefinitions.TYPE.VISION) { StateData.vision_data.Deserialize(recieve_buffer); } else if (type == CommunicationDefinitions.TYPE.SENSOR_STATE) { StateData.sensor_state_data.Deserialize(recieve_buffer); } else if (type == CommunicationDefinitions.TYPE.VISION_IMAGE) { parent.vision_view.SetImage(recieve_buffer.Skip(1).ToArray()); } else if (type == CommunicationDefinitions.TYPE.ROBOT_STATE) { StateData.robot_state_data.Deserialize(recieve_buffer); } else if (type == CommunicationDefinitions.TYPE.REALSENSE) { StateData.realsense_data.Deserialize(recieve_buffer); } else { Console.WriteLine("Invalid Type"); } recieve_state = RecieveState.Key; } } } }
public bool recieve(List <byte[]> messages) { if (!connected()) { connect(); } lock (recieve_lock) { try { //c Console.WriteLine("Before: {0}" , client.Available); while (client.Available >= 1) { byte[] key = new byte[3]; client.Client.Receive(key, 3, SocketFlags.None); for (int i = 0; i < 3; i++) { if (key[i] != CommunicationDefinitions.key[i]) { Console.WriteLine("Invalid key"); continue; } } byte[] t = new byte[1]; client.Client.Receive(t, 1, SocketFlags.None); int size = 127; // defualt size CommunicationDefinitions.TYPE type = (CommunicationDefinitions.TYPE)t[0]; if (CommunicationDefinitions.PACKET_SIZES.ContainsKey(type)) { size = CommunicationDefinitions.PACKET_SIZES[type]; } else { Console.WriteLine("invalid type"); continue; } byte[] msg = new byte[size + 1]; msg[0] = t[0]; messages.Add(msg); client.Client.Receive(messages.Last(), 1, size, SocketFlags.None); } // Console.WriteLine("After: {0}", client.Available); return(true); } catch { _connected = false; return(false); } } }