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; } }