Пример #1
0
    private async void TryConnectToController(string ipAddress, int port)
    {
        if (controllerClientSocket != null)
        {
            TextToaster.Toast("Cannot connect to multiple controllers at once.");
            return;
        }

        if (!IPAddress.TryParse(ipAddress, out IPAddress controllerIpAddress))
        {
            TextToaster.Toast($"Failed to parse {ipAddress} as an IP address.");
            return;
        }

        Interlocked.Increment(ref connectingCount);
        var controllerEndPoint = new IPEndPoint(controllerIpAddress, port);

        var tcpSocket = new TcpSocket(new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp));

        try
        {
            if (await tcpSocket.ConnectAsync(controllerEndPoint))
            {
                controllerClientSocket = new ControllerClientSocket(viewerId, tcpSocket);
            }
        }
        catch (TcpSocketException e)
        {
            TextToaster.Toast($"Failed not connect to the controller: {e.Message}");
        }

        Interlocked.Decrement(ref connectingCount);
    }
Пример #2
0
    private async void TryConnectToController(string ipAddress, int port)
    {
        if (controllerClientSocket != null)
        {
            TextToaster.Toast("Cannot connect to multiple controllers at once.");
            return;
        }

        ++connectingCount;

        var random = new System.Random();
        int userId = random.Next();

        IPAddress controllerIpAddress;

        if (!IPAddress.TryParse(ipAddress, out controllerIpAddress))
        {
            TextToaster.Toast($"Failed to parse {ipAddress} as an IP address.");
            --connectingCount;
            return;
        }

        var controllerEndPoint = new IPEndPoint(controllerIpAddress, port);

        var tcpSocket = new TcpSocket(new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp));

        if (await tcpSocket.ConnectAsync(controllerEndPoint))
        {
            controllerClientSocket = new ControllerClientSocket(userId, tcpSocket);
        }

        --connectingCount;
    }
Пример #3
0
    private void UpdateControllerClient()
    {
        ViewerScene viewerScene = null;

        try
        {
            viewerScene = controllerClientSocket.ReceiveViewerScene();
        }
        catch (TcpSocketException e)
        {
            print($"TcpSocketException while receiving: {e}");
            controllerClientSocket = null;
            return;
        }

        if (viewerScene != null)
        {
            foreach (var kinectSenderElement in viewerScene.kinectSenderElements)
            {
                IPAddress ipAddress;
                if (!IPAddress.TryParse(kinectSenderElement.address, out ipAddress))
                {
                    TextToaster.Toast($"Failed to parse {ipAddress} as an IP address.");
                }

                var endPoint = new IPEndPoint(ipAddress, kinectSenderElement.port);
                if (kinectReceivers.FirstOrDefault(x => x.SenderEndPoint == endPoint) != null)
                {
                    continue;
                }

                TryConnectToKinectSender(endPoint);
            }

            foreach (var kinectReceiver in kinectReceivers)
            {
                var kinectSenderElement = viewerScene.kinectSenderElements.FirstOrDefault(x => x.address == kinectReceiver.SenderEndPoint.Address.ToString() &&
                                                                                          x.port == kinectReceiver.SenderEndPoint.Port);

                if (kinectSenderElement != null)
                {
                    var kinectOrigin = kinectReceiver.KinectOrigin;
                    if (kinectOrigin != null)
                    {
                        kinectOrigin.transform.localPosition = kinectSenderElement.position;
                        kinectOrigin.transform.localRotation = kinectSenderElement.rotation;
                    }
                }
            }

            this.viewerScene = viewerScene;
        }

        var receiverStates = new List <ReceiverState>();

        foreach (var receiver in kinectReceivers)
        {
            var receiverState = new ReceiverState(receiver.SenderEndPoint.Address.ToString(),
                                                  receiver.SenderEndPoint.Port,
                                                  receiver.ReceiverSessionId);
            receiverStates.Add(receiverState);
        }

        try
        {
            controllerClientSocket.SendViewerState(receiverStates);
        }
        catch (TcpSocketException e)
        {
            print($"TcpSocketException while connecting: {e}");
            controllerClientSocket = null;
        }
    }
Пример #4
0
    private void UpdateControllerClient()
    {
        ControllerScene controllerScene = null;

        try
        {
            controllerScene = controllerClientSocket.ReceiveControllerScene();
        }
        catch (TcpSocketException e)
        {
            print($"TcpSocketException while receiving from controller: {e}");
            controllerClientSocket = null;
            return;
        }

        if (controllerScene != null)
        {
            foreach (var controllerNode in controllerScene.nodes)
            {
                if (!IPAddress.TryParse(controllerNode.senderAddress, out IPAddress ipAddress))
                {
                    TextToaster.Toast($"Failed to parse an IP address ({ipAddress}) from controller.");
                    continue;
                }

                var senderEndPoint = new IPEndPoint(ipAddress, controllerNode.senderPort);
                if (receivers.Values.FirstOrDefault(x => x.SenderEndPoint.Equals(senderEndPoint)) != null)
                {
                    continue;
                }

                StartCoroutine(TryConnectToKinectSender(senderEndPoint));
            }

            foreach (var receiverPair in receivers)
            {
                var controllerNode = controllerScene.FindNode(receiverPair.Value.SenderEndPoint);
                if (controllerNode != null)
                {
                    var kinectNode = sharedSpaceScene.GetKinectNode(receiverPair.Key);
                    if (kinectNode != null)
                    {
                        kinectNode.transform.localPosition = controllerNode.position;
                        kinectNode.transform.localRotation = controllerNode.rotation;
                    }
                }
            }

            this.controllerScene = controllerScene;
        }

        var receiverStates = new List <ReceiverState>();

        foreach (var receiver in receivers.Values)
        {
            var receiverState = new ReceiverState(receiver.ReceiverId, receiver.SenderId, receiver.SenderEndPoint);
            receiverStates.Add(receiverState);
        }

        try
        {
            controllerClientSocket.SendViewerState(receiverStates);
        }
        catch (TcpSocketException e)
        {
            print($"TcpSocketException while connecting: {e}");
            controllerClientSocket = null;
        }
    }