Beispiel #1
0
        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;
                    }
                }
            }
        }
Beispiel #2
0
        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);
                }
            }
        }