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