Example #1
0
        protected void sendState(SmartComponent component)
        {
            int PORT = (int)component.Properties["PortNumber"].Value;

            using (var sock = new UdpClient())
            {
                LineSensor.Builder sensorData  = LineSensor.CreateBuilder();
                Point.Builder      sensedPoint = new Point.Builder();
                Point.Builder      start       = new Point.Builder();
                Point.Builder      end         = new Point.Builder();

                UInt32  sensorIDProperty    = Convert.ToUInt32(component.Properties["SensorID"].Value);
                Vector3 sensedPointProperty = (Vector3)component.Properties["SensedPoint"].Value;
                String  sensedPartProperty  = Convert.ToString(component.Properties["SensedPart"].Value);
                Vector3 startProperty       = (Vector3)component.Properties["Start"].Value;
                Vector3 endProperty         = (Vector3)component.Properties["End"].Value;
                double  radiusProperty      = (double)component.Properties["Radius"].Value;

                // convert point from m to mm
                sensedPointProperty = sensedPointProperty.Multiply(1000);

                sensedPoint.SetX(sensedPointProperty.x)
                .SetY(sensedPointProperty.y)
                .SetZ(sensedPointProperty.z);

                start.SetX(startProperty.x)
                .SetY(startProperty.y)
                .SetZ(startProperty.z);

                end.SetX(endProperty.x)
                .SetY(endProperty.y)
                .SetZ(endProperty.z);

                sensorData.SetSensedPoint(sensedPoint)
                .SetStart(start)
                .SetEnd(end)
                .SetRadius(radiusProperty)
                .SetSensedPart(sensedPartProperty)
                .SetSensorID(sensorIDProperty);
                //if(sensorData.SensorID == 42)
                //{
                //    Debug.WriteLine($"sensor nbr {sensorData.SensorID} numbers: ({sensorData.SensedPoint.X}, {sensorData.SensedPoint.Y}, {sensorData.SensedPoint.Z})");
                //}
                LineSensor data = sensorData.Build();

                using (MemoryStream memoryStream = new MemoryStream())
                {
                    data.WriteTo(memoryStream);
                    var bytesSent = sock.SendAsync(memoryStream.ToArray(), (int)memoryStream.Length, "localhost", PORT);
                    //int bytesSent = sock.Send(memoryStream.ToArray(), (int)memoryStream.Length, "localhost", PORT);
                    //if (bytesSent < 0)
                    //{
                    //    Console.WriteLine("ERROR");
                    //}
                }

                //byte[] bytes = Encoding.UTF8.GetBytes("hello, world!");
                //sock.Send(bytes, bytes.Length, "localhost", PORT);
            }
        }
        /// <summary>
        /// Data from DemoEgmPortNumbers.POS_GUIDE_PORT is a Google Protocol Buffer message of type EgmRobot.
        /// Data from DemoEgmPortNumbers.LINE_SENSOR_PORT is a Google Protocol Buffer message of type LineSensor
        /// Data from any other port is unknown and not handeled by this monitor.
        /// </summary>
        /// <param name="udpPortNbr"></param>
        /// <param name="data"></param>
        public void Write(int udpPortNbr, byte[] data)
        {
            switch (udpPortNbr)
            {
            case (int)DemoEgmPortNumbers.POS_GUIDE_PORT:
                EgmRobot robot = EgmRobot.CreateBuilder().MergeFrom(data).Build();
                feedback = new double[] {
                    robot.FeedBack.Cartesian.Pos.X,
                    robot.FeedBack.Cartesian.Pos.Y,
                    robot.FeedBack.Cartesian.Pos.Z
                };
                break;

            case (int)DemoEgmPortNumbers.LINE_SENSOR_PORT:
                LineSensor state = LineSensor.CreateBuilder().MergeFrom(data).Build();
                if (state.SensorID == 42)
                {
                    sensedPoint = new double[]
                    {
                        state.SensedPoint.X,
                        state.SensedPoint.Y,
                        state.SensedPoint.Z
                    };
                }
                break;

            default:
                Debug.WriteLine($"No defined Write() case for data coming from port {udpPortNbr}.");
                break;
            }
        }