コード例 #1
0
        static void Main(string[] args)
        {
            PNetServer.InitializeServer(
                Properties.Settings.Default.MaximumPlayers,
                Properties.Settings.Default.ListenPort);

            PNetServer.ApproveConnection     = ApproveConnection;
            PNetServer.OnPlayerConnected    += OnPlayerConnected;
            PNetServer.OnPlayerDisconnected += delegate(Player player) { Debug.Log("player {0} disconnected", player.Id); };
            GameState.update += Update;

            Debug.logger = new DefaultConsoleLogger();

            //TODO: make some Room child classes, and load them into the _rooms dictionary
            Room newRoom = Room.CreateRoom("basic room");

            _room = newRoom.AddBehaviour <BasicRoom>();
            //loading of other data as well

            //Finish starting the server. Started in a new thread so that the console can sit open and still accept input
            _serverThread = new Thread(() => PNetServer.Start(Properties.Settings.Default.FrameTime));
            _serverThread.Start();

            //let the console sit open, waiting for a quit
            //this will throw errors if the program isn't running as a console app, like on unix as a background process
            //recommend including Mono.Unix.Native, and separately handling unix signals if this is running on unix.
            while (true)
            {
                var input = Console.ReadLine();

                if (input == "quit")
                {
                    break;
                }

                Thread.Sleep(100);
            }
            //we're exiting. close the server thread.
            if (_serverThread.IsAlive)
            {
                _serverThread.Abort();
            }
        }
コード例 #2
0
        static void Main(string[] args)
        {
            var config = new ServerConfiguration(Properties.Settings.Default.MaximumPlayers,
                                                 Properties.Settings.Default.ListenPort);

            PNetServer.InitializeServer(config);

            PNetServer.ApproveConnection     = ApproveConnection;
            PNetServer.OnPlayerConnected    += OnPlayerConnected;
            PNetServer.OnPlayerDisconnected += delegate(Player player) { Debug.Log("player {0} disconnected", player.Id); };

            //If you want a global 'update' function, assign it here
            GameState.update += Update;

            Debug.logger = new DefaultConsoleLogger();

            //TODO: make some Room child classes, and load them into the _rooms dictionary
            Room newRoom = Room.CreateRoom("basic room");

            _room = newRoom.AddBehaviour <BasicRoom>();
            //loading of other data as well

            //Finish starting the server. Started in a new thread so that the console can sit open and still accept input
            _serverThread = new Thread(() => PNetServer.Start(Properties.Settings.Default.FrameTime));
            _serverThread.Start();

            Console.WriteLine("Server is running");
            //let the console sit open, waiting for a quit
            //this will throw errors if the program isn't running as a console app, like on unix as a background process
            //recommend including Mono.Unix.Native, and separately handling unix signals if this is running on unix.
            //you could also write a service, and run things that way. (Might also work on Unix better)
            while (true)
            {
                //This will throw errors on linux if not attached to a terminal
                var input = Console.ReadLine();

                if (input == "quit")
                {
                    break;
                }

                //if you wanted, you could also process other commands here to pass to the server/rooms.

                Thread.Sleep(100);
            }

            //shut down lidgren
            PNetServer.Disconnect();
            //shut down server. Will actually cause the server thread to finish running.
            PNetServer.Shutdown();
            //and give plenty of time for the server thread to close nicely
            Thread.Sleep(50);

            //we're exiting. make sure the server thread is closed
            if (_serverThread.IsAlive)
            {
                Console.WriteLine("Should not have had to abort thread. This could be a bug\nPress any key to continue shutting down.");
                Console.ReadKey();
                _serverThread.Abort();
            }
        }