From: <br...@us...> - 2008-10-07 20:32:42
|
Revision: 410 http://acmcontester.svn.sourceforge.net/acmcontester/?rev=410&view=rev Author: brus07 Date: 2008-10-07 20:32:33 +0000 (Tue, 07 Oct 2008) Log Message: ----------- Preparing commit. Added Paths: ----------- ACMServer/trunk/ACMServer/Library/Connector/SocketServer.cs ACMServer/trunk/ACMServer/Library/Connector/SocketServerTask.cs Removed Paths: ------------- ACMServer/trunk/ACMServer/Library/Connector/SocketServer.cs Deleted: ACMServer/trunk/ACMServer/Library/Connector/SocketServer.cs =================================================================== --- ACMServer/trunk/ACMServer/Library/Connector/SocketServer.cs 2008-10-07 16:01:38 UTC (rev 409) +++ ACMServer/trunk/ACMServer/Library/Connector/SocketServer.cs 2008-10-07 20:32:33 UTC (rev 410) @@ -1,190 +0,0 @@ -using System; -using JadBenAutho.EasySocket; -using System.Collections.Generic; -using AcmContester.Library.LibraryExtention; - -namespace AcmContester.Library.Connector -{ - public class SocketServer: AbstractConnector - { - int port = 4120; - EasyServer server; - - //val: - //free - vilnyj - //busy - zajnjatyj - //unknown - nevidomyj - Dictionary<int, string> cleintStatus = new Dictionary<int, string>(); - - - public SocketServer() - { - server = new EasyServer(port, true); - server.DataArrived += new DataArrived2Server_EventHandler(DataArrived); - } - - public void Start() - { - if (server == null) - server = new EasyServer(port, true); - server.StartListen(); - } - public void Stop() - { - if (server != null) - { - server.StopListen(); - server.Dispose(); - server = null; - } - } - - private void ServerSend(SystemMessage mes, int TargetClientIndex) - { - byte[] bytes = SystemMessage.Serialize(mes); - server.SendData(bytes, TargetClientIndex); - } - public override bool Send(SystemMessage message) - { - List<int> freeTesters = GetFreeTesters(); - if (freeTesters.Count != 0) - { - Random random = new Random(); - DataSender(message, freeTesters[random.Next() % freeTesters.Count]); - return true; - } - return false; - } - protected virtual void DataSender(SystemMessage message, int clientIndex) - { - cleintStatus[server.ClientsList[clientIndex].GetHashCode()] = "busy"; - message.Description = server.ClientsList[clientIndex].GetHashCode().ToString(); - ServerSend(message, clientIndex); - } - - private void DataArrived(object Data, SocketStream DataSender) - { - SystemMessage sysMes = SystemMessage.Deserialize((byte[])Data); - if (sysMes.IsType("SystemTestBusyMessage") == true) - { - if (SystemMessageX(sysMes) == true) - return; - } - DataArriver(sysMes); - } - protected virtual void DataArriver(SystemMessage message) - { - cleintStatus[Int32.Parse(message.Description)] = "free"; - OnDataArrived(message); - } - - public int CountClients() - { - return server.CountClients; - } - - - Queue<string> q = new Queue<string>(); - - /// <summary> - /// \xCF\xEE\xE2\xE5\xF0\xF2\xE0\xBA \xF1\xEF\xE8\xF1\xEE\xEA \xE2\xB3\xEB\xFC\xED\xE8\xF5 \xF2\xE5\xF1\xF2\xE5\xF0\xB3\xE2. - /// ³\xE4\xEF\xF0\xE0\xE2\xEB\xFF\xBA \xEA\xEE\xE6\xED\xEE\xEC\xF3 \xF2\xE5\xF1\xF2\xE5\xF0\xF3 \xEF\xEE\xE2\xB3\xE4\xEE\xEC\xEB\xE5\xED\xED\xFF \xE2\xE8\xE3\xEB\xFF\xE4\xF3: - /// test HashCodeTester HashCode\xC7\xE0\xEF\xE8\xF2\xF3 - /// \xC4\xE5 HashCode\xC7\xE0\xEF\xE8\xF2\xF3 - \xF6\xE5 \xF3\xED\xB3\xEA\xE0\xEB\xFC\xED\xE8\xE9 \xF5\xE5\xF8 \xEA\xEE\xE4 \xEA\xEE\xE6\xED\xEE\xE3\xEE \xF2\xE0\xEA\xEE\xE3\xEE \xE7\xE0\xEF\xE8\xF2\xF3. - /// \xCF\xEE\xF2\xB3\xEC \xF7\xE5\xEA\xE0\xBA \xEE\xE4\xED\xF3 (1) \xF1\xE5\xEA\xF3\xED\xE4\xF3 \xEA\xEE\xEB\xE8 \xE7\xE0\xEF\xEE\xE2\xED\xE8\xF2\xFC\xF1\xFF q \xF1\xEF\xE8\xF1\xEA\xEE\xEC \xEF\xF0\xE8\xF1\xEB\xE0\xED\xE8\xF5 \xEF\xEE\xE2\xB3\xE4\xEE\xEC\xEB\xE5\xED\xFC - /// \xDF\xEA\xF9\xEE \xF2\xE5\xF1\xF2\xE5\xF0 \xEF\xEE\xE2\xB3\xE4\xEE\xEC\xEB\xFF\xBA \xF9\xEE \xE2\xB3\xED \xE2\xB3\xEB\xFC\xED\xE8\xE9, \xF2\xEE\xE4\xB3 \xE9\xEE\xE3\xEE \xED\xEE\xEC\xE5\xF0 \xE7\xE0\xED\xEE\xF1\xE8\xF2\xFC\xF1\xFF \xE4\xEE \xF0\xE5\xE7\xF3\xEB\xFC\xF2\xE0\xF2\xF3. - /// </summary> - /// <returns>\xD1\xEF\xE8\xF1\xEE\xEA \xE2\xB3\xEB\xFC\xED\xE8\xF5 \xF2\xE5\xF1\xF2\xE5\xF0\xB3\xE2</returns> - private List<int> GetFreeTesters() - { - if (server == null) - { - return new List<int>(); - } - - q.Clear(); - string curHashCode = DateTime.Now.GetHashCode().ToString(); - for (int i = 0; i < server.CountClients; i++) - { - if (cleintStatus.ContainsKey(server.ClientsList[i].GetHashCode()) == false) - { - cleintStatus[server.ClientsList[i].GetHashCode()] = "unknown"; - } - if (cleintStatus[server.ClientsList[i].GetHashCode()] == "unknown") - { - string message = "test"; - message += " " + server.ClientsList[i].GetHashCode().ToString(); - message += " " + curHashCode; - SystemMessage mes = new SystemMessage(message, "SystemTestBusyMessage"); - ServerSend(mes, i); - } - } - - DateTime start = DateTime.Now; - Dictionary<string, int> preResult = new Dictionary<string, int>(); - while (server != null && preResult.Count < server.CountClients) - { - if (((TimeSpan)(DateTime.Now - start)).TotalSeconds > 1.0) - { - break; - } - lock (q) - { - while (q.Count != 0) - { - string curStr = q.Dequeue(); - char[] chars = new char[1]; - chars[0] = ' '; - string[] mes = curStr.Split(chars); - if (mes[0] == "free" && curHashCode == mes[2]) - { - cleintStatus[Int32.Parse(mes[1])] = "free"; - preResult.Add(mes[1], 0); - } - else - { - if (mes[0] == "busy") - { - cleintStatus[Int32.Parse(mes[1])] = "busy"; - } - } - } - } - System.Threading.Thread.Sleep(50); - } - - List<int> result = new List<int>(); - for (int i = 0; i < server.CountClients; i++) - { - if (cleintStatus.ContainsKey(server.ClientsList[i].GetHashCode()) == false) - cleintStatus[server.ClientsList[i].GetHashCode()] = "unknown"; - if (cleintStatus[server.ClientsList[i].GetHashCode()] == "free") - result.Add(i); - //string hashCode = server.ClientsList[i].GetHashCode().ToString(); - //if (preResult.ContainsKey(hashCode) == true) - // result.Add(i); - } - return result; - } - - /// <summary> - /// \xCF\xE5\xF0\xE5\xE2\xB3\xF0\xE0\xBA \xF7\xE8 \xF6\xE5 \xF1\xEB\xF3\xE6\xE1\xEE\xE2\xE5 \xEF\xEE\xE2\xB3\xE4\xEE\xEC\xEB\xE5\xED\xED\xFF. - /// \xDF\xEA\xF9\xEE \xF1\xEB\xF3\xE6\xE1\xEE\xE2\xE5, \xF2\xEE\xE4\xB3 \xE2\xEE\xED\xEE \xE7\xE0\xED\xEE\xF1\xE8\xF2\xFC\xF1\xFF \xE4\xEE \xF1\xEF\xE8\xF1\xEA\xF3 q - /// </summary> - /// <param name="message">\xCF\xEE\xE2\xB3\xE4\xEE\xEC\xEB\xE5\xED\xED\xFF</param> - /// <returns>\xDF\xEA\xF9\xEE \xF6\xE5 \xF1\xEB\xF3\xE6\xE1\xEE\xE2\xE5 \xEF\xEE\xE2\xB3\xE4\xEE\xEC\xEB\xE5\xED\xED\xFF, \xF2\xEE\xE4\xB3 \xEF\xEE\xE2\xE5\xF0\xF2\xE0\xBA\xF2\xFC\xF1\xFF true \xEF\xEE \xB3\xED\xE0\xEA\xF8\xEE\xEC\xF3 false</returns> - private bool SystemMessageX(SystemMessage message) - { - char[] chars = new char[1]; - chars[0] = ' '; - string[] mes = message.Message.Split(chars); - if (mes[0] == "busy" || mes[0] == "free") - { - lock(q) - q.Enqueue(message.Message); - return true; - } - return false; - } - } -} Added: ACMServer/trunk/ACMServer/Library/Connector/SocketServer.cs =================================================================== --- ACMServer/trunk/ACMServer/Library/Connector/SocketServer.cs (rev 0) +++ ACMServer/trunk/ACMServer/Library/Connector/SocketServer.cs 2008-10-07 20:32:33 UTC (rev 410) @@ -0,0 +1,79 @@ +using System; +using AcmContester.Library.LibraryExtention; +using JadBenAutho.EasySocket; + +namespace AcmContester.Library.Connector +{ + public class SocketServer: AbstractConnector + { + int port = 4120; + EasyServer server; + + private void init() + { + server = new EasyServer(port, true); + server.DataArrived += DataArrived; + } + + public SocketServer() + { + init(); + } + public SocketServer(int Port) + { + this.port = Port; + init(); + } + + public void Start() + { + if (server == null) + server = new EasyServer(port, true); + server.StartListen(); + } + public void Stop() + { + if (server != null) + { + server.StopListen(); + server.Dispose(); + server = null; + } + } + public int CountClients + { + get + { + return server.CountClients; + } + } + + public virtual bool Send(SystemMessage mes, int TargetClientIndex) + { + byte[] bytes = SystemMessage.Serialize(mes); + return server.SendData(bytes, TargetClientIndex); + } + + public override bool Send(SystemMessage message) + { + //TODO: jogo ne mozna juzaty u cjomu vypadku + throw new Exception("The method or operation is not implemented."); + } + + private void DataArrived(object Data, SocketStream DataSender) + { + SystemMessage sysMes = SystemMessage.Deserialize((byte[])Data); + OnDataArrived(sysMes); + } + + //TODO: tymchasovo haj bude + // ale potim potribno bude braty hash naprjami iz realnogo Client'a (haj persylajutsja) + public SocketsList ClientsList + { + get + { + return server.ClientsList; + } + } + } +} Copied: ACMServer/trunk/ACMServer/Library/Connector/SocketServerTask.cs (from rev 409, ACMServer/trunk/ACMServer/Library/Connector/SocketServer.cs) =================================================================== --- ACMServer/trunk/ACMServer/Library/Connector/SocketServerTask.cs (rev 0) +++ ACMServer/trunk/ACMServer/Library/Connector/SocketServerTask.cs 2008-10-07 20:32:33 UTC (rev 410) @@ -0,0 +1,180 @@ +using System; +using JadBenAutho.EasySocket; +using System.Collections.Generic; +using AcmContester.Library.LibraryExtention; + +namespace AcmContester.Library.Connector +{ + public class SocketServerTask: AbstractConnector + { + SocketServer server; + + //val: + //free - vilnyj + //busy - zajnjatyj + //unknown - nevidomyj + Dictionary<int, string> cleintStatus = new Dictionary<int, string>(); + + + public SocketServerTask() + { + server = new SocketServer(); + server.onDataArrived += DataArrived; + } + + public void Start() + { + server.Start(); + } + public void Stop() + { + server.Stop(); + } + + private bool ServerSend(SystemMessage mes, int TargetClientIndex) + { + return server.Send(mes, TargetClientIndex); + } + public override bool Send(SystemMessage message) + { + List<int> freeTesters = GetFreeTesters(); + if (freeTesters.Count != 0) + { + Random random = new Random(); + DataSender(message, freeTesters[random.Next() % freeTesters.Count]); + return true; + } + return false; + } + protected virtual void DataSender(SystemMessage message, int clientIndex) + { + cleintStatus[server.ClientsList[clientIndex].GetHashCode()] = "busy"; + message.Description = server.ClientsList[clientIndex].GetHashCode().ToString(); + ServerSend(message, clientIndex); + } + + private void DataArrived(SystemMessage sysMes) + { + if (sysMes.IsType("SystemTestBusyMessage") == true) + { + if (SystemMessageX(sysMes) == true) + return; + } + DataArriver(sysMes); + } + protected virtual void DataArriver(SystemMessage message) + { + cleintStatus[Int32.Parse(message.Description)] = "free"; + OnDataArrived(message); + } + + public int CountClients() + { + return server.CountClients; + } + + + Queue<string> q = new Queue<string>(); + + /// <summary> + /// \xCF\xEE\xE2\xE5\xF0\xF2\xE0\xBA \xF1\xEF\xE8\xF1\xEE\xEA \xE2\xB3\xEB\xFC\xED\xE8\xF5 \xF2\xE5\xF1\xF2\xE5\xF0\xB3\xE2. + /// ³\xE4\xEF\xF0\xE0\xE2\xEB\xFF\xBA \xEA\xEE\xE6\xED\xEE\xEC\xF3 \xF2\xE5\xF1\xF2\xE5\xF0\xF3 \xEF\xEE\xE2\xB3\xE4\xEE\xEC\xEB\xE5\xED\xED\xFF \xE2\xE8\xE3\xEB\xFF\xE4\xF3: + /// test HashCodeTester HashCode\xC7\xE0\xEF\xE8\xF2\xF3 + /// \xC4\xE5 HashCode\xC7\xE0\xEF\xE8\xF2\xF3 - \xF6\xE5 \xF3\xED\xB3\xEA\xE0\xEB\xFC\xED\xE8\xE9 \xF5\xE5\xF8 \xEA\xEE\xE4 \xEA\xEE\xE6\xED\xEE\xE3\xEE \xF2\xE0\xEA\xEE\xE3\xEE \xE7\xE0\xEF\xE8\xF2\xF3. + /// \xCF\xEE\xF2\xB3\xEC \xF7\xE5\xEA\xE0\xBA \xEE\xE4\xED\xF3 (1) \xF1\xE5\xEA\xF3\xED\xE4\xF3 \xEA\xEE\xEB\xE8 \xE7\xE0\xEF\xEE\xE2\xED\xE8\xF2\xFC\xF1\xFF q \xF1\xEF\xE8\xF1\xEA\xEE\xEC \xEF\xF0\xE8\xF1\xEB\xE0\xED\xE8\xF5 \xEF\xEE\xE2\xB3\xE4\xEE\xEC\xEB\xE5\xED\xFC + /// \xDF\xEA\xF9\xEE \xF2\xE5\xF1\xF2\xE5\xF0 \xEF\xEE\xE2\xB3\xE4\xEE\xEC\xEB\xFF\xBA \xF9\xEE \xE2\xB3\xED \xE2\xB3\xEB\xFC\xED\xE8\xE9, \xF2\xEE\xE4\xB3 \xE9\xEE\xE3\xEE \xED\xEE\xEC\xE5\xF0 \xE7\xE0\xED\xEE\xF1\xE8\xF2\xFC\xF1\xFF \xE4\xEE \xF0\xE5\xE7\xF3\xEB\xFC\xF2\xE0\xF2\xF3. + /// </summary> + /// <returns>\xD1\xEF\xE8\xF1\xEE\xEA \xE2\xB3\xEB\xFC\xED\xE8\xF5 \xF2\xE5\xF1\xF2\xE5\xF0\xB3\xE2</returns> + private List<int> GetFreeTesters() + { + if (server == null) + { + return new List<int>(); + } + + q.Clear(); + string curHashCode = DateTime.Now.GetHashCode().ToString(); + for (int i = 0; i < server.CountClients; i++) + { + if (cleintStatus.ContainsKey(server.ClientsList[i].GetHashCode()) == false) + { + cleintStatus[server.ClientsList[i].GetHashCode()] = "unknown"; + } + if (cleintStatus[server.ClientsList[i].GetHashCode()] == "unknown") + { + string message = "test"; + message += " " + server.ClientsList[i].GetHashCode().ToString(); + message += " " + curHashCode; + SystemMessage mes = new SystemMessage(message, "SystemTestBusyMessage"); + ServerSend(mes, i); + } + } + + DateTime start = DateTime.Now; + Dictionary<string, int> preResult = new Dictionary<string, int>(); + while (server != null && preResult.Count < server.CountClients) + { + if (((TimeSpan)(DateTime.Now - start)).TotalSeconds > 1.0) + { + break; + } + lock (q) + { + while (q.Count != 0) + { + string curStr = q.Dequeue(); + char[] chars = new char[1]; + chars[0] = ' '; + string[] mes = curStr.Split(chars); + if (mes[0] == "free" && curHashCode == mes[2]) + { + cleintStatus[Int32.Parse(mes[1])] = "free"; + preResult.Add(mes[1], 0); + } + else + { + if (mes[0] == "busy") + { + cleintStatus[Int32.Parse(mes[1])] = "busy"; + } + } + } + } + System.Threading.Thread.Sleep(50); + } + + List<int> result = new List<int>(); + for (int i = 0; i < server.CountClients; i++) + { + if (cleintStatus.ContainsKey(server.ClientsList[i].GetHashCode()) == false) + cleintStatus[server.ClientsList[i].GetHashCode()] = "unknown"; + if (cleintStatus[server.ClientsList[i].GetHashCode()] == "free") + result.Add(i); + //string hashCode = server.ClientsList[i].GetHashCode().ToString(); + //if (preResult.ContainsKey(hashCode) == true) + // result.Add(i); + } + return result; + } + + /// <summary> + /// \xCF\xE5\xF0\xE5\xE2\xB3\xF0\xE0\xBA \xF7\xE8 \xF6\xE5 \xF1\xEB\xF3\xE6\xE1\xEE\xE2\xE5 \xEF\xEE\xE2\xB3\xE4\xEE\xEC\xEB\xE5\xED\xED\xFF. + /// \xDF\xEA\xF9\xEE \xF1\xEB\xF3\xE6\xE1\xEE\xE2\xE5, \xF2\xEE\xE4\xB3 \xE2\xEE\xED\xEE \xE7\xE0\xED\xEE\xF1\xE8\xF2\xFC\xF1\xFF \xE4\xEE \xF1\xEF\xE8\xF1\xEA\xF3 q + /// </summary> + /// <param name="message">\xCF\xEE\xE2\xB3\xE4\xEE\xEC\xEB\xE5\xED\xED\xFF</param> + /// <returns>\xDF\xEA\xF9\xEE \xF6\xE5 \xF1\xEB\xF3\xE6\xE1\xEE\xE2\xE5 \xEF\xEE\xE2\xB3\xE4\xEE\xEC\xEB\xE5\xED\xED\xFF, \xF2\xEE\xE4\xB3 \xEF\xEE\xE2\xE5\xF0\xF2\xE0\xBA\xF2\xFC\xF1\xFF true \xEF\xEE \xB3\xED\xE0\xEA\xF8\xEE\xEC\xF3 false</returns> + private bool SystemMessageX(SystemMessage message) + { + char[] chars = new char[1]; + chars[0] = ' '; + string[] mes = message.Message.Split(chars); + if (mes[0] == "busy" || mes[0] == "free") + { + lock(q) + q.Enqueue(message.Message); + return true; + } + return false; + } + } +} Property changes on: ACMServer/trunk/ACMServer/Library/Connector/SocketServerTask.cs ___________________________________________________________________ Added: svn:mergeinfo + This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |