private void OnDataReceive(IAsyncResult ar) { IPEndPoint receivedIpEndPoint = new IPEndPoint(IPAddress.Any, port); Byte[] receivedBytes = udpClient.EndReceive(ar, ref receivedIpEndPoint); // Convert data to ASCII and print in console string receivedText = ASCIIEncoding.ASCII.GetString(receivedBytes); LocalUdpPacket packet = LocalUdpPacket.FromJson(receivedText); if (packet != null) { bool notify = !ignoreDataFromClient || (ignoreDataFromClient && packet.senderId != id); if (notify) { if (onDataReceived != null) { onDataReceived(packet); } } } // Restart listening for udp data packages udpClient.BeginReceive(OnDataReceive, null); }
public static LocalUdpPacket New(string senderId, Dictionary <string, object> data) { var packet = new LocalUdpPacket(); packet.senderId = senderId; packet.data = data; return(packet); }
public void Send(Dictionary <string, object> data) { var packet = LocalUdpPacket.New(id, data); var json = packet.ToJson(); if (!string.IsNullOrEmpty(json)) { var bytes = Encoding.ASCII.GetBytes(json); udpClient.Send(bytes, bytes.Length, remoteEP); } }
private void OnDataReceived(LocalUdpPacket packet) { // string msg = "Data received from " + packet.senderId + ":\n"; // msg += " [data]: " + MiniJSON.Json.Serialize(packet.data); // UnityEngine.Debug.Log(msg); if (packet.senderId == Server_SenderId) { // Queue the packet up to be process on the main thread in the next update frame. _packetQueue.Enqueue(packet); } }
public static LocalUdpPacket FromJson(string json) { try { var packetDict = MiniJSON.Json.Deserialize(json) as Dictionary <string, object>; if (packetDict == null) { return(null); } var packet = new LocalUdpPacket(); // Parse sender id. if (packetDict.ContainsKey("sender_id")) { string senderId = packetDict["sender_id"] as string; if (senderId != null) { packet.senderId = senderId; } else { return(null); } } // Parse data dictionary. if (packetDict.ContainsKey("data")) { var data = packetDict["data"] as Dictionary <string, object>; if (data != null) { packet.data = data; } else { return(null); } } return(packet); } catch { return(null); } }
private void OnDataReceived(LocalUdpPacket packet) { Invoke(new Action(() => { string msg = "Data received from " + packet.senderId + ":\n"; msg += " [data]: " + MiniJSON.Json.Serialize(packet.data); this.labelLastServerMessage.Text = msg; if (packet.senderId == Client_SenderId) { // Process the packet's event data. string eventId = null; if (packet.data.ContainsKey("event_id")) { eventId = packet.data["event_id"] as string; } if (eventId != null) { switch (eventId) { case EventId_RotationResolutionInDegrees: double degrees = Convert.ToDouble(packet.data["degrees"]); radialController.RotationResolutionInDegrees = degrees; break; case EventId_AutoHapticFeedback: bool useAutoHapticFeedback = Convert.ToBoolean(packet.data["use_auto_haptic_feedback"]); radialController.UseAutomaticHapticFeedback = useAutoHapticFeedback; break; default: Console.WriteLine("Event Id " + eventId + " is not implemented."); break; } } else { // This is not a normal radial controller event from the client. Lets just throw this one to the console. Console.WriteLine(msg); } } }), null ); }
public void Update() { if (_packetQueue.Count > 0) { while (_packetQueue.Count > 0) { LocalUdpPacket packet = _packetQueue.Dequeue(); // Process the packet's event data. string eventId = null; if (packet.data.ContainsKey("event_id")) { eventId = packet.data["event_id"] as string; } if (eventId != null) { switch (eventId) { case EventId_ServerReady: if (onBridgeReady != null) { onBridgeReady(); } break; case EventId_ControlAcquired: if (onControlAcquired != null) { onControlAcquired(); } break; case EventId_ControlLost: if (onControlLost != null) { onControlLost(); } break; case EventId_RotationChanged: double deltaDegrees = System.Convert.ToDouble(packet.data["delta_degrees"]); if (onRotationChanged != null) { onRotationChanged((float)deltaDegrees); } break; case EventId_ButtonPressed: if (onButtonPressed != null) { onButtonPressed(); } break; case EventId_ButtonHolding: if (onButtonHolding != null) { onButtonHolding(); } break; case EventId_ButtonReleased: if (onButtonReleased != null) { onButtonReleased(); } break; case EventId_ButtonClicked: if (onButtonClicked != null) { onButtonClicked(); } break; default: UnityEngine.Debug.LogWarning("[RadialControllerWindowsBridge] Event Id " + eventId + " is not implemented."); break; } } else { // This is not a normal radial controller event from the server. Lets just throw this one to the Unity debug console. string msg = "Extra data received from " + packet.senderId + ":\n"; msg += " [data]: " + MiniJSON.Json.Serialize(packet.data); UnityEngine.Debug.Log(msg); } } } }