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); }
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; } TeleportWorkItem workItem = new TeleportWorkItem(this, sendAddress.ToString(), state, portNumber, networkTimeoutMsec, peerConnectionLed); // Actually do the teleportation asynchronously so we don't block the UI TeleportDelegate teleport = new TeleportDelegate(workItem.DoTeleport); lastAsyncCall = teleport.BeginInvoke(new AsyncCallback(TeleportCallback), null); }