Exemplo n.º 1
0
        /// <summary>
        /// Envia datos y espera a que el cliente los procese
        /// </summary>
        private void Send(KinectData kinectData)
        {
            //Si el cliente no está conectado, esperamos a que se conecte
            if (client == null || !client.Connected)
            {
                Console.WriteLine("Awaiting Client ");

                client   = listener.AcceptTcpClient();
                ns       = client.GetStream();
                nsWriter = new StreamWriter(ns);
                nsReader = new StreamReader(ns);

                nsWriter.AutoFlush = true;

                Console.WriteLine("Client connected ");
            }

            try
            {
                //Creamos el objeto que se enviará
                TCPData data = DataProcessor.GetProcessedData(kinectData);
                data.Timestamp = kinectData.Timestamp;

                //Enviamos el dato
                Console.WriteLine("Sending data...");
                String dataStr = JsonConvert.SerializeObject(data);
                nsWriter.WriteLine(dataStr);
                nsWriter.Flush();

                //Esperamos un ACK del cliente (en este periodo no enviaremos más datos)
                //el dato devuelto es el Timestamp de la imagen procesada
                Console.WriteLine("Wait client response...");
                long processed = Convert.ToInt64(nsReader.ReadLine());
            }

            catch (Exception ex)
            {
                Console.WriteLine("Exception: " + ex.Message + " (Client Connected? " + client.Connected + ")");
            }
            finally
            {
                ///Calculamos los FPS a los que estamos emitiendo mensajes
                Console.WriteLine("FPS (aprox): " + 1 / (DateTime.UtcNow - fpsTime).TotalSeconds);

                //Obtenemos la siguiente marca temporal con la que calcularemos los FPS
                fpsTime = DateTime.UtcNow;
            }
        }