Exemplo n.º 1
0
    public void SendViewerScene(ControllerScene controllerScene)
    {
        var controllerSceneJson  = JsonUtility.ToJson(controllerScene);
        var controllerSceneBytes = Encoding.ASCII.GetBytes(controllerSceneJson);

        var ms = new MemoryStream();

        ms.Write(BitConverter.GetBytes(controllerSceneBytes.Length), 0, 4);
        ms.Write(controllerSceneBytes, 0, controllerSceneBytes.Length);
        tcpSocket.Send(ms.ToArray());
    }
Exemplo n.º 2
0
    void Start()
    {
        TelepresenceToolkitPlugin.texture_set_reset();

        random   = new System.Random();
        viewerId = random.Next();

        udpSocket = new UdpSocket(1024 * 1024);

        controllerScene = null;
        receivers       = new Dictionary <int, Receiver>();
        connectingCount = 0;

        sharedSpaceScene.GizmoVisibility = false;

        UpdateUI();
    }
Exemplo n.º 3
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;
        }
    }
Exemplo n.º 4
0
    void OnLayout()
    {
        ImGui.SetNextWindowPos(new Vector2(0.0f, 0.0f), ImGuiCond.FirstUseEver);
        ImGui.SetNextWindowSize(new Vector2(Screen.width * 0.5f, Screen.height * 0.2f), ImGuiCond.FirstUseEver);
        ImGui.Begin("Local IP Addresses");
        foreach (var ipAddress in localIpAddresses)
        {
            ImGui.BulletText(ipAddress.ToString());
        }
        ImGui.End();

        ImGui.SetNextWindowPos(new Vector2(0.0f, Screen.height * 0.2f), ImGuiCond.FirstUseEver);
        ImGui.SetNextWindowSize(new Vector2(Screen.width * 0.5f, Screen.height * 0.4f), ImGuiCond.FirstUseEver);
        ImGui.Begin("Viewer States");
        foreach (var viewerState in viewerStates.Values)
        {
            ImGui.Text($"Viewer (ID: {viewerState.viewerId})");
            foreach (var receiverState in viewerState.receiverStates)
            {
                ImGui.BulletText($"Receiver (ID: {receiverState.receiverId})");
                ImGui.Indent();
                ImGui.Text($"  Sender ID: {receiverState.senderId}");
                ImGui.Text($"  Sender End Point: {receiverState.senderAddress}:{receiverState.senderPort}");
                ImGui.Unindent();
            }
            ImGui.NewLine();
        }
        ImGui.End();

        ImGui.SetNextWindowPos(new Vector2(0.0f, Screen.height * 0.6f), ImGuiCond.FirstUseEver);
        ImGui.SetNextWindowSize(new Vector2(Screen.width * 0.5f, Screen.height * 0.4f), ImGuiCond.FirstUseEver);
        ImGui.Begin("Scene Templates");
        ImGui.BeginTabBar("Scene Templates TabBar");
        if (ImGui.BeginTabItem("Default"))
        {
            foreach (var viewerStatePair in viewerStates)
            {
            }
            if (ImGui.Button("Set Scene"))
            {
            }
            ImGui.EndTabItem();
        }
        if (ImGui.BeginTabItem("Single Camera"))
        {
            ImGui.InputText("Address", ref singleCameraAddress, 30);
            ImGui.InputInt("Port", ref singleCameraPort);
            ImGui.InputFloat("Distance", ref singleCameraDistance);

            if (ImGui.Button("Set Scene"))
            {
                foreach (var serverSocket in serverSockets)
                {
                    var node = new ControllerNode(singleCameraAddress,
                                                  singleCameraPort,
                                                  new Vector3(0.0f, 0.0f, singleCameraDistance),
                                                  Quaternion.identity);

                    var controllerScene = new ControllerScene();
                    controllerScene.nodes = new List <ControllerNode>();
                    controllerScene.nodes.Add(node);
                    controllerScenes[serverSocket] = controllerScene;
                }
            }
        }
        ImGui.EndTabBar();
        ImGui.End();

        ImGui.SetNextWindowPos(new Vector2(Screen.width * 0.5f, 0.0f), ImGuiCond.FirstUseEver);
        ImGui.SetNextWindowSize(new Vector2(Screen.width * 0.5f, Screen.height), ImGuiCond.FirstUseEver);
        ImGui.Begin("Scene");
        ImGui.BeginTabBar("Scene TabBar");

        int kinectSenderElementIndex = 0;

        foreach (var viewerStatePair in viewerStates)
        {
            var serverSocket    = viewerStatePair.Key;
            var viewerState     = viewerStatePair.Value;
            var controllerScene = controllerScenes[serverSocket];
            if (ImGui.BeginTabItem(viewerState.viewerId.ToString()))
            {
                foreach (var node in controllerScene.nodes.ToList())
                {
                    ImGui.InputText("Address##" + kinectSenderElementIndex, ref node.senderAddress, 30);
                    ImGui.InputInt("Port##" + kinectSenderElementIndex, ref node.senderPort);
                    ImGui.InputFloat3("Position##" + kinectSenderElementIndex, ref node.position);
                    var eulerAngles = node.rotation.eulerAngles;
                    if (ImGui.InputFloat3("Rotation##" + kinectSenderElementIndex, ref eulerAngles))
                    {
                        node.rotation = Quaternion.Euler(eulerAngles);
                    }

                    if (ImGui.Button("Remove This Sender##" + kinectSenderElementIndex))
                    {
                        bool removeResult = controllerScene.nodes.Remove(node);
                        print($"removeResult: {removeResult}");
                    }

                    ImGui.NewLine();

                    ++kinectSenderElementIndex;
                }

                if (ImGui.Button("Add Kinect Sender"))
                {
                    controllerScene.nodes.Add(new ControllerNode("127.0.0.1", SENDER_PORT, Vector3.zero, Quaternion.identity));
                }

                if (ImGui.Button("Update Scene"))
                {
                    string invalidIpAddress = null;
                    foreach (var node in controllerScene.nodes)
                    {
                        if (!IsValidIpAddress(node.senderAddress))
                        {
                            invalidIpAddress = node.senderAddress;
                            break;
                        }
                    }

                    if (invalidIpAddress == null)
                    {
                        serverSocket.SendViewerScene(controllerScene);
                    }
                    else
                    {
                        print($"Scene not updated since an invalid IP address was found: {invalidIpAddress}");
                    }
                }
                ImGui.EndTabItem();
            }
        }
        ImGui.EndTabBar();
        ImGui.End();
    }