public Task <IConnection> Connect(string endpoint) { if (_peer == null || !_peer.IsActive()) { throw new InvalidOperationException("Transport not started. Call Start before connect."); } var infos = endpoint.Split(':'); var host = infos[0]; var port = ushort.Parse(infos[1]); var result = _peer.Connect(host, port, null, 0); var address = new SystemAddress(host, port); var tcs = new TaskCompletionSource <IConnection>(); _pendingConnections.TryAdd(address.ToString(), tcs); return(tcs.Task); }
public Task <IConnection> Connect(string endpoint) { logger.Debug("Connecting to endpoint {0}", endpoint); if (_peer == null || !_peer.IsActive()) { throw new InvalidOperationException("Transport not started. Call Start before connect."); } var infos = endpoint.Split(':'); var portString = infos[infos.Length - 1]; var port = ushort.Parse(portString); var host = endpoint.Substring(0, endpoint.Length - portString.Length - 1); var tcs = new TaskCompletionSource <IConnection>(); var pendingConnection = new PendingConnection(new SystemAddress(host, port).ToString(), tcs); _pendingConnections.Enqueue(pendingConnection); lock (_connectionTask) { _connectionTask = _connectionTask.ContinueWith(t => { var connectResult = _peer.Connect(host, port, null, 0); if (connectResult != ConnectionAttemptResult.CONNECTION_ATTEMPT_STARTED) { throw new Exception("Raknet connection failed: " + connectResult); } return(tcs.Task); }).Unwrap(); return(_connectionTask); } //for (int i = 0; i < 1; i++) //{ // UnityEngine.Debug.Log("before Fix for ip"); // var sa = _peer.GetMyBoundAddress(i); // address.FixForIPVersion(sa); // var str = address.ToString(); // UnityEngine.Debug.Log("address = " + str); //} //var ips = Dns.GetHostAddresses(host); }