static void Main(string[] args) { Logger.Write("[ EclipseSharp Server ]"); // Set up some basic runtime variables. Logger.Write("Setting up initial variables..."); Data.AppPath = AppDomain.CurrentDomain.BaseDirectory; // Load our server settings! Logger.Write("Loading server settings..."); Data.LoadSettings(Data.AppPath + "settings.xml"); // Apply some settings to our window. Console.Title = String.Format("{0} - Running on Port {1}", Data.Settings.GameName, Data.Settings.Port); // Check and Create our data structure. Logger.Write("Checking data structure..."); Data.CheckDirectories(); Data.InitData(); // Create our Server instance. // We're also setting up our event handlers that the server produces here. Logger.Write("Creating server objects..."); Server = new Networking.Server(Data.Settings.MaxPlayers, Data.Settings.Port); Server.ConnectHandler += PacketHandler.ClientConnected; Server.DisconnectHandler += PacketHandler.ClientDisconnected; Server.PacketHandler += PacketHandler.Handle; // Create our logic handlers. PingClients = new Timer(new TimerCallback(PacketHandler.PingClients), null, 0, 2000); HandleMovement = new Timer(new TimerCallback(Players.HandleMovement), null, 0, 10); SyncPlayers = new Timer(new TimerCallback(Players.SyncPlayers), null, 0, 500); MOTD = new Timer(new TimerCallback(Players.SendMOTD), null, 0, 1000); // The excuse for this is that with the way the client loads and the sockets being a seperate thread an MOTD at MapOK does not always arrive after the UI loaded, but sometimes before. Eep. SavePlayers = new Timer(new TimerCallback(Players.SavePlayers), null, 0, 300000); // Open the server to players! Logger.Write("Opening server..."); Server.Open(); Logger.Write("--- Normal Operations Below ---"); // Keep the console open for as long as the program can run. while (Program.Running) { var input = Console.ReadLine().Trim().ToLower(); if (input.Length > 0) Input.Process(input); } // Close down the server! We no longer need it. Server.Close(); // Time to get rid of everything! .. Or well, save it to prevent data loss. Data.SavePlayers(); Data.SaveClasses(); Data.SaveMaps(); }
private void ServerState(Networking.Server server, bool listening, ushort port) { try { this.Invoke((MethodInvoker) delegate { if (!listening) { lstClients.Items.Clear(); } listenToolStripStatusLabel.Text = listening ? string.Format("Listening on port {0}.", port) : "Not listening."; }); UpdateWindowTitle(); } catch (InvalidOperationException) { } }
private void hostToolStripMenuItem_Click(object sender, EventArgs e) { if (server != null) { server.Close(); server = null; if (client == null) timer.Start(); return; } server = new Networking.Server(); server.Host(); server.ReceiveTCPData += new Networking.TCPNetworkReceivePacket(server_ReceiveTCPData); server.ReceiveUDPData += new Networking.NetworkReceivePacket(server_ReceiveUDPData); if (!timer.Enabled) timer.Start(); }