Example #1
0
        /// <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);
        }
Example #2
0
		/// <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;
		}