Example #1
0
        /// <summary>
        /// Starts up the server. There can only be one active server per application instance,
        /// and only one server per port per machine.
        /// The NetPeerConfiguration allows for more customization and optimisation of the server.
        /// </summary>
        /// <param name="name">The name of the server to create. Cannot be null or blank.</param>
        /// <param name="config">The NetPeerConfiguration to use on the server. Should at least specify port number.</param>
        public static void StartServer(string name, NetPeerConfiguration config)
        {
            if (!Initialized)
            {
                Error("Call Init() before starting the server.");
                return;
            }

            if (IsServer)
            {
                Error("A server is already active. Shutdown the old server before opening this new one.");
                return;
            }

            if (string.IsNullOrWhiteSpace(name))
            {
                Error("Name for new server is null, server starting cancelled.");
                return;
            }

            if (config == null)
            {
                Error("Config is null, server starting cancelled.");
                return;
            }

            try
            {
                config.EnableMessageType(NetIncomingMessageType.ConnectionApproval);
                config.AcceptIncomingConnections = true;
                JNetServer s = new JNetServer(name, config);
                s.Start();
                JNet.Server = s;

                Log("Server now active on port " + config.Port);
            }
            catch (Exception e)
            {
                throw new JNetException(string.Format("Exception creating and starting server. See inner exception ({0})", e.GetType().FullName), e);
            }

            bool didUnregister = Tracker.Reset();

            if (didUnregister)
            {
                Error("When server was activated, networked objects had to be untracked. Is the client connected to a different remote server?");
            }

            // Register existing scene objects...
            if (EnableSceneObjectNetworking)
            {
                RegisterAllSceneObjects();
            }
        }
Example #2
0
        /// <summary>
        /// Shuts down and disposes of the currently active server, disconnecting all clients.
        /// </summary>
        /// <param name="bye">The message to display to disconnected clients.</param>
        public static void ShutdownServer(string bye)
        {
            if (!IsServer)
            {
                Error("Server is already shut down and disposed.");
                return;
            }

            Server.Shutdown(bye);
            Server = null;

            Tracker.Reset();

            Log("Server shut down and disposed of.");
        }
Example #3
0
        public void SerializeAll()
        {
            if (!JNet.IsServer)
            {
                JNet.Error("Not on server, cannot serialize all.");
                return;
            }

            for (int i = 0; i < ActiveObjects.Count; i++)
            {
                var obj = ActiveObjects[i];
                if(obj == null)
                {
                    JNet.Error("Null object in tracked objects list.");
                    ActiveObjects.RemoveAt(i);
                    i--;
                    continue;
                }

                if(obj.NetBehaviours != null)
                {
                    foreach (var b in obj.NetBehaviours)
                    {
                        if(b != null && b.NetDirty)
                        {
                            JNetServer server = JNet.GetServer();
                            NetOutgoingMessage msg = server.CreateMessage();
                            msg.Write((byte)JDataType.SERIALIZED);
                            msg.Write(obj.NetID);
                            msg.Write(b.BehaviourID);
                            b.NetSerialize(msg, false);

                            server.SendToAllExcept(server.LocalClientConnection, msg, b.SerializationDeliveryMethod, 1);

                            b.NetDirty = false;
                        }
                    }
                }
            }
        }