/// <summary> /// This method is used to do all of the initial setup of objects /// </summary> public bool Populate(NetWorker socket) { List <SimpleNetworkedMonoBehavior> allBehaviors = new List <SimpleNetworkedMonoBehavior>(startNetworkedSceneBehaviors); // Find all objects in the scene that have SNMB SimpleNetworkedMonoBehavior[] behaviors = FindObjectsOfType <SimpleNetworkedMonoBehavior>(); foreach (SimpleNetworkedMonoBehavior behavior in behaviors) { if (!allBehaviors.Contains(behavior)) { allBehaviors.Add(behavior); } } if (Networking.Sockets == null) { Debug.LogWarning("No connection has been established for this network scene, preparing offline play..."); IsSetup = true; foreach (Action execute in setupActions) { execute(); } return(false); } ControllingSocket = socket; OwningNetWorker = ControllingSocket; if (!OwningNetWorker.Connected) { NetWorker.BasicEvent handler = null; handler = () => { SetupObjects(allBehaviors.ToArray(), OwningNetWorker); foreach (Action execute in setupActions) { execute(); } OwningNetWorker.connected -= handler; }; OwningNetWorker.connected += handler; } else { SetupObjects(allBehaviors.ToArray(), OwningNetWorker); foreach (Action execute in setupActions) { execute(); } } OwningNetWorker.AddCustomDataReadEvent(WriteCustomMapping.NETWORKING_MANAGER_POLL_PLAYERS, PollPlayersResponse, true); return(true); }
/// <summary> /// To reset the network by clearing the sockets and disconnecting them if possible /// </summary> public static void NetworkingReset() { if (Sockets == null) return; ushort[] keys = new ushort[Sockets.Keys.Count]; Sockets.Keys.CopyTo(keys, 0); foreach (ushort key in keys) { if (Sockets[key] != null && Sockets[key].Connected) { Sockets[key].Disconnect(); Sockets[key] = null; } } Sockets.Clear(); PrimarySocket = null; SimpleNetworkedMonoBehavior.ResetAll(); if (networkResetInvoker != null) networkResetInvoker(); networkResetInvoker = null; }