diff --git a/Galactic Colors Control Server/Party.cs b/Galactic Colors Control Server/Party.cs index 70f5846..031bb64 100644 --- a/Galactic Colors Control Server/Party.cs +++ b/Galactic Colors Control Server/Party.cs @@ -1,5 +1,6 @@ using System.Collections.Generic; using System.Net.Sockets; +using System.Threading; namespace Galactic_Colors_Control_Server { @@ -10,6 +11,7 @@ namespace Galactic_Colors_Control_Server public int size = 0; public bool open = false; private string owner = ""; + public bool isBuzy = false; public bool isPrivate { get { return password != ""; } } public Party(string Name, int Size, string Owner) @@ -69,5 +71,13 @@ namespace Galactic_Colors_Control_Server return list; } } + + /// + /// Update party (max: 150ms) + /// + public virtual void Update() + { + isBuzy = false; + } } } \ No newline at end of file diff --git a/Galactic Colors Control Server/Program.cs b/Galactic Colors Control Server/Program.cs index 8f02d14..9423756 100644 --- a/Galactic Colors Control Server/Program.cs +++ b/Galactic Colors Control Server/Program.cs @@ -33,6 +33,8 @@ namespace Galactic_Colors_Control_Server public static Config config = new Config(); public static Logger logger = new Logger(); public static MultiLang multilang = new MultiLang(); + + public static Timer UpdateTimer; public static Thread CheckConnected = new Thread(CheckConnectedLoop); /// @@ -83,6 +85,7 @@ namespace Galactic_Colors_Control_Server serverSocket.Listen(0); serverSocket.BeginAccept(AcceptCallback, null); CheckConnected.Start(); + UpdateTimer = new Timer(UpdateCallback, null, 0, 200); logger.Write("Server setup complete", Logger.logType.info); } @@ -222,6 +225,22 @@ namespace Galactic_Colors_Control_Server if (clients.ContainsKey(current)) { current.BeginReceive(buffer, 0, BUFFER_SIZE, SocketFlags.None, ReceiveCallback, current); } } + private static void UpdateCallback(object state) + { + foreach (int partyId in parties.Keys.ToArray()) + { + if (parties[partyId].isBuzy) + { + logger.Write("Party " + partyId + " overload", Logger.logType.error); + } + else + { + parties[partyId].isBuzy = true; + new Thread(parties[partyId].Update).Start(); + } + } + } + private static void CheckConnectedLoop() { while (_run)