public bool Start() { // If no config file has been found, these values are 0 by default if (Config.GameConfig.Port == 0 || Config.GameConfig.Backlog == 0) { Logger.WriteLog(LogType.Error, "Invalid config values!"); return(false); } Loop.Start(); SetupCommunicator(); try { ListenerSocket = new LengthedSocket(SizeType.Dword, false); ListenerSocket.OnError += OnError; ListenerSocket.OnAccept += OnAccept; ListenerSocket.Bind(new IPEndPoint(IPAddress.Any, Config.GameConfig.Port)); ListenerSocket.Listen(Config.GameConfig.Backlog); } catch (Exception e) { Logger.WriteLog(LogType.Error, "Unable to create or start listening on the client socket! Exception:"); Logger.WriteLog(LogType.Error, e); return(false); } LoginManager.OnLogin += OnLogin; QueueManager = new QueueManager(this); ListenerSocket.AcceptAsync(); Logger.WriteLog(LogType.Network, "*** Listening for clients on port {0}", Config.GameConfig.Port); Timer.Add("SessionExpire", 10000, true, () => { var toRemove = new List <uint>(); lock (IncomingClients) { toRemove.AddRange(IncomingClients.Where(ic => ic.Value.ExpireTime < DateTime.Now).Select(ic => ic.Key)); foreach (var rem in toRemove) { IncomingClients.Remove(rem); } } }); Timer.Add("QueueManagerUpdate", Config.QueueConfig.UpdateInterval, true, () => { QueueManager.Update(Config.ServerInfoConfig.MaxPlayers - CurrentPlayers); }); return(true); }
public virtual void Start(IPAddress bindAddress, Int32 port) { Socket = new LengthedSocket(LengthedSocket.SizeType.Word); Socket.Bind(new IPEndPoint(bindAddress, port)); Socket.Listen(100); Socket.BeginAccept(EndAccept); }
public QueueManager(Server server) { Server = server; Socket = new LengthedSocket(SizeType.Dword, false); Socket.OnError += OnError; Socket.OnAccept += OnAccept; Socket.Bind(new IPEndPoint(IPAddress.Any, Config.Port)); Socket.Listen(Config.Backlog); Socket.AcceptAsync(); }
public bool Start() { // If no config file has been found, these values are 0 by default if (Config.AuthConfig.Port == 0 || Config.AuthConfig.Backlog == 0) { Logger.WriteLog(LogType.Error, "Invalid config values!"); return(false); } try { ListenerSocket = new LengthedSocket(SizeType.Word); ListenerSocket.OnError += OnError; ListenerSocket.OnAccept += OnAccept; ListenerSocket.Bind(new IPEndPoint(IPAddress.Any, Config.AuthConfig.Port)); ListenerSocket.Listen(Config.AuthConfig.Backlog); } catch (Exception e) { Logger.WriteLog(LogType.Error, "Unable to create or start listening on the client socket! Exception:"); Logger.WriteLog(LogType.Error, e); return(false); } Loop.Start(); if (!SetupCommunicator()) { return(false); } Logger.WriteLog(LogType.Network, "*** Listening for clients on port {0}", Config.AuthConfig.Port); ListenerSocket.AcceptAsync(); // TODO: Set up timed events (query stuff, internal communication, etc...) Timer.Add("DisconnectTimedoutClients", 10000, true, () => { lock (Clients) foreach (var c in Clients.Where(c => c.TimeoutTime < DateTime.Now)) { c.Close(); } }); return(true); }
private bool SetupCommunicator() { if (Config.CommunicatorConfig.Port == 0 || Config.CommunicatorConfig.Address == null || Config.CommunicatorConfig.Backlog == 0) { Logger.WriteLog(LogType.Error, "Invalid Communicator config data! Can't connect!"); return(false); } try { AuthCommunicator = new LengthedSocket(SizeType.Word); AuthCommunicator.OnAccept += OnCommunicatorAccept; AuthCommunicator.Bind(new IPEndPoint(IPAddress.Parse(Config.CommunicatorConfig.Address), Config.CommunicatorConfig.Port)); AuthCommunicator.Listen(Config.CommunicatorConfig.Backlog); } catch (Exception e) { Logger.WriteLog(LogType.Error, "Unable to create or start listening on the communicator socket! Exception:"); Logger.WriteLog(LogType.Error, e); return(false); } AuthCommunicator.AcceptAsync(); Timer.Add("ServerInfoUpdate", 1000, true, () => { lock (GameServers) foreach (var server in GameServers) { if ((DateTime.Now - server.Value.LastRequestTime).TotalMilliseconds > 30000) { server.Value.RequestServerInfo(); } } }); Logger.WriteLog(LogType.Network, $"*** Listening for Game servers on port {Config.CommunicatorConfig.Port}"); return(true); }