Terrarium.PeerToPeer.NetworkEngine.Teleport C# (CSharp) Method

Teleport() private method

private Teleport ( TeleportState state ) : void
state TeleportState
return void
        internal void Teleport(TeleportState state)
        {
            IPAddress sendAddress = null;
            Debug.Assert(state != null);

            // Check to ensure the network is available.  If it isn't, teleport
            // to the local peer
            //            if (oneTeleportAtATime == true && lastAsyncCall != null)
            //            {
            //                GameEngine.Current.ReceiveTeleportation(state, true);
            //                CountLocalTeleportation();
            //                return;
            //            }

            // If there is more than one peer world, randomly pick
            // one to send the organism to
            if (PeerManager.KnownPeers.Count != 0)
            {
                // Pick a random peer
                sendAddress = _peerManager.GetRandomPeer();

                // If we pick ourselves, short circuit for perf (and so things don't get announced
                // on the screen as a valid teleport)
                if (sendAddress.Equals(_hostIP))
                    sendAddress = null;
            }

            if (sendAddress == null)
            {
                // Otherwise, teleport back to self
            //                GameEngine.Current.ReceiveTeleportation(state, true);
            //                CountLocalTeleportation();
                sendAddress = _hostIP;
            //                return;
            }

            var workItem = new TeleportWorkItem(this, sendAddress.ToString(), state, PortNumber,
                                                NetworkTimeoutMsec, _peerConnectionLed);

            // Actually do the teleportation asynchronously so we don't block the UI
            TeleportDelegate teleport = workItem.DoTeleport;
            teleport.BeginInvoke(TeleportCallback, null);
        }