Exemple #1
0
        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);
        }