public bool Connect(IMoCapClient_ConnectionInfo connectionInfo) { // extract server address from connection info IPAddress serverAddress = (connectionInfo is NatNetClient.ConnectionInfo) ? ((NatNetClient.ConnectionInfo)connectionInfo).serverAddress : IPAddress.Loopback; // fallback > localhost // try connecting try { IPEndPoint commandEndpoint = new IPEndPoint(serverAddress, PORT_COMMAND); packetOut = new NatNetPacket_Out(commandEndpoint); packetIn = new NatNetPacket_In(); commandClient = new UdpClient(); // connect to server's command port if (PingServer()) { GetSceneDescription(); Debug.Log("Connected to NatNet server '" + serverInfo.serverName + "'."); // immediately get first packet of frame data GetFrameData(); connected = true; streamingEnabled = false; } } catch (Exception e) { Debug.LogWarning("Could not connect to NatNet server " + serverAddress + " (" + e.Message + ")."); } if (connected) { // request streaming IP address try { if (SendRequest("getDataStreamAddress") && (serverResponse.Length > 0)) { multicastAddress = IPAddress.Parse(serverResponse); Debug.Log("Data stream address: " + multicastAddress); // Prepare multicast data reception dataClient = new UdpClient(); dataClient.ExclusiveAddressUse = false; dataClient.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true); dataClient.Client.Bind(new IPEndPoint(IPAddress.Any, PORT_DATA)); dataClient.JoinMulticastGroup(multicastAddress); dataClient.Client.ReceiveTimeout = 100; } } catch (Exception e) { Debug.LogWarning("Could not establish data streaming (" + e.Message + ")."); if (dataClient != null) { dataClient.Close(); dataClient = null; } } // request framerate try { if (SendRequest("getFramerate") && (serverResponse.Length > 0)) { updateRate = float.Parse(serverResponse); } } catch (Exception e) { Debug.LogWarning("Could not establish framerate (" + e.Message + ")."); } } return(connected); }
public bool Connect(IMoCapClient_ConnectionInfo connectionInfo) { // extract server address from connection info IPAddress serverAddress = (connectionInfo is NatNetClient.ConnectionInfo) ? ((NatNetClient.ConnectionInfo) connectionInfo).serverAddress : IPAddress.Loopback; // fallback > localhost // try connecting try { IPEndPoint commandEndpoint = new IPEndPoint(serverAddress, PORT_COMMAND); packetOut = new NatNetPacket_Out(commandEndpoint); packetIn = new NatNetPacket_In(); commandClient = new UdpClient(); // connect to server's command port if ( PingServer() ) { GetSceneDescription(); Debug.Log("Connected to NatNet server '" + serverInfo.serverName + "'."); // print list of actor and device names if (scene.actors.Length > 0) { string actorNames = ""; foreach (Actor a in scene.actors) { if (actorNames.Length > 0) { actorNames += ", "; } actorNames += a.name; } Debug.Log("Actors (" + scene.actors.Length + "): " + actorNames); } if (scene.devices.Length > 0) { string deviceNames = ""; foreach (Device d in scene.devices) { if (deviceNames.Length > 0) { deviceNames += ", "; } deviceNames += d.name; } Debug.Log("Devices (" + scene.devices.Length + "): " + deviceNames); } // immediately get first packet of frame data GetFrameData(); connected = true; streamingEnabled = false; } } catch (Exception e) { Debug.LogWarning("Could not connect to NatNet server " + serverAddress + " (" + e.Message + ")."); } // request streaming IP address if (connected) { try { if (SendRequest("getDataStreamAddress") && (serverResponse.Length > 0)) { multicastAddress = IPAddress.Parse(serverResponse); Debug.Log("Data stream address: " + multicastAddress); // Prepare multicast data reception dataClient = new UdpClient(); dataClient.ExclusiveAddressUse = false; dataClient.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true); dataClient.Client.Bind(new IPEndPoint(IPAddress.Any, PORT_DATA)); dataClient.JoinMulticastGroup(multicastAddress); dataClient.Client.ReceiveTimeout = 100; } } catch (Exception e) { Debug.LogWarning("Could not establish data streaming (" + e.Message + ")."); if (dataClient != null) { dataClient.Close(); dataClient = null; } } } return connected; }