Пример #1
0
    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);
    }
Пример #2
0
    public static LocalUdpPacket New(string senderId, Dictionary <string, object> data)
    {
        var packet = new LocalUdpPacket();

        packet.senderId = senderId;
        packet.data     = data;

        return(packet);
    }
Пример #3
0
    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);
        }
    }
Пример #4
0
        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);
            }
        }
Пример #5
0
    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);
        }
    }
Пример #6
0
        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
                   );
        }
Пример #7
0
        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);
                    }
                }
            }
        }