From: <br...@us...> - 2008-09-16 13:18:21
|
Revision: 350 http://acmcontester.svn.sourceforge.net/acmcontester/?rev=350&view=rev Author: brus07 Date: 2008-09-16 13:18:31 +0000 (Tue, 16 Sep 2008) Log Message: ----------- Added queue in SocketClientGate, and treeing send to free Tester. Modified Paths: -------------- ACMServer/trunk/ACMServer/Library/Connector/SocketServer.cs ACMServer/trunk/ACMServer/Plugins/MediatorPlugins/SocketServerGatePlugin/SocketServerGate.cs ACMServer/trunk/ACMServer/Plugins/MediatorPlugins/WebGatePlugin/WebGetter.cs ACMServer/trunk/ACMServer/Tester/Library/SocketClientGate.cs Modified: ACMServer/trunk/ACMServer/Library/Connector/SocketServer.cs =================================================================== --- ACMServer/trunk/ACMServer/Library/Connector/SocketServer.cs 2008-09-14 15:01:05 UTC (rev 349) +++ ACMServer/trunk/ACMServer/Library/Connector/SocketServer.cs 2008-09-16 13:18:31 UTC (rev 350) @@ -40,14 +40,16 @@ byte[] bytes = SystemMessage.Serialize(mes); server.SendData(bytes, TargetClientIndex); } - public void Send(SystemMessage message) + public 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) { Modified: ACMServer/trunk/ACMServer/Plugins/MediatorPlugins/SocketServerGatePlugin/SocketServerGate.cs =================================================================== --- ACMServer/trunk/ACMServer/Plugins/MediatorPlugins/SocketServerGatePlugin/SocketServerGate.cs 2008-09-14 15:01:05 UTC (rev 349) +++ ACMServer/trunk/ACMServer/Plugins/MediatorPlugins/SocketServerGatePlugin/SocketServerGate.cs 2008-09-16 13:18:31 UTC (rev 350) @@ -2,6 +2,8 @@ using AcmContester.Library.Connector; using AcmContester.Library.LibraryExtention.Data; using AcmContester.Library.LibraryExtention; +using System.Collections.Generic; +using System.Threading; namespace AcmContester.Plugins.MediatorPlugins.SocketServerGatePlugin { @@ -36,16 +38,63 @@ base.DataSender(message, clientIndex); } } + + Dictionary<SystemMessage, object> poolWork = new Dictionary<SystemMessage, object>(); + bool poolWorking = false; private void Send2(Submit submit) { if (dataContainer.Contains(submit) == false) { - SystemMessage sysMes = new SystemMessage(submit.ToString()); - base.Send(sysMes); + SystemMessage sysMes = new SystemMessage(submit.ToString(), "TestingSubmit"); + lock (poolWork) + { + poolWork.Add(sysMes, null); + } + startPool(); } } - public new void Send(SystemMessage message) + private void runPool() { + if (poolWorking == true) + return; + poolWorking = true; + while (true) + { + Thread.Sleep(100); + lock (poolWork) + { + if (poolWork.Count == 0) + break; + foreach (SystemMessage sysMes in poolWork.Keys) + { + if (base.Send(sysMes) == true) + { + poolWork.Remove(sysMes); + break; + } + } + } + } + poolWorking = false; + } + private static void RunningPool(Object ob) + { + SocketServerGate ssg = (SocketServerGate)ob; + ssg.runPool(); + } + private void startPool() + { + if (poolWorking == false) + { + ThreadPool.QueueUserWorkItem(RunningPool, this); + } + } + + public new bool Send(SystemMessage message) + { + if (message.IsType("TestingSubmitList") == false) + return false; + SubmitList submitList = SubmitList.CreateFromXml(message.Message); OnLogMessage("Get submits"); @@ -59,8 +108,8 @@ for (int index = 0; index < submitList.Items.Length; index++) { Send2(submitList.Items[index]); - //base.Send(submitList.Items[index].ToString()); } + return true; } protected override void DataArriver(SystemMessage message) Modified: ACMServer/trunk/ACMServer/Plugins/MediatorPlugins/WebGatePlugin/WebGetter.cs =================================================================== --- ACMServer/trunk/ACMServer/Plugins/MediatorPlugins/WebGatePlugin/WebGetter.cs 2008-09-14 15:01:05 UTC (rev 349) +++ ACMServer/trunk/ACMServer/Plugins/MediatorPlugins/WebGatePlugin/WebGetter.cs 2008-09-16 13:18:31 UTC (rev 350) @@ -49,16 +49,17 @@ public SystemMessage GetInfoFromSite() { checkAddress(); - object ob = GetInfoFromSiteX(); + object ob = MediatorGetInfoFromSiteX(); if (ob == null) return new SystemMessage("", "Empty"); - SystemMessage sysMes = new SystemMessage(ob.ToString()); + SystemMessage sysMes = new SystemMessage(ob.ToString(), "TestingSubmitList"); return sysMes; } public void Send(SystemMessage message) { - SendX(message.Message); + if (message.IsType("TestingResult") == true) + MediatorSendX(message.Message); } public string PathToSource @@ -75,7 +76,12 @@ #endregion - + void MediatorSendX(string message) + { + Result result = Result.CreateFromXml(message); + SendX(message); + container.Return(result); + } void SendX(string message) { string res = ""; @@ -105,6 +111,30 @@ WebResponse myResponse = myRequest.GetResponse(); myResponse.Close(); } + + string MediatorGetInfoFromSiteX() + { + string getAll = GetInfoFromSiteX(); + if (String.IsNullOrEmpty(getAll) == true) + return null; + SubmitList list = SubmitList.CreateFromXml(getAll); + List<Submit> result = new List<Submit>(); + for (int i = 0; i < list.Items.Length; i++) + { + if (container.Contains(list.Items[i]) == false) + { + result.Add(list.Items[i]); + + //TODO: \xEF\xEE\xF2\xF0\xB3\xE1\xED\xEE \xE4\xEE\xE1\xE0\xE2\xEB\xFF\xF2\xE8 \xF2\xB3\xEB\xFC\xEA\xE8 \xF2\xEE\xE4\xB3 \xEA\xEE\xEB\xE8 \xF6\xE5\xE9 \xF1\xE0\xE1\xEC\xB3\xF2 \xE2\xB3\xE4\xEF\xF0\xE0\xE2\xEB\xE5\xED\xE8\xE9 \xED\xE0 \xF2\xE5\xF1\xF2\xF3\xE2\xE0\xED\xED\xFF + container.Add(list.Items[i]); + } + } + if (result.Count == 0) + return null; + SubmitList resultList = new SubmitList(); + resultList.Items = result.ToArray(); + return resultList.ToString(); + } string GetInfoFromSiteX() { HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(fullPathToWebPages + "/get.php"); Modified: ACMServer/trunk/ACMServer/Tester/Library/SocketClientGate.cs =================================================================== --- ACMServer/trunk/ACMServer/Tester/Library/SocketClientGate.cs 2008-09-14 15:01:05 UTC (rev 349) +++ ACMServer/trunk/ACMServer/Tester/Library/SocketClientGate.cs 2008-09-16 13:18:31 UTC (rev 350) @@ -148,7 +148,7 @@ { Result res = Result.CreateFromXml(result); OnAddLogText("Send", "ID " + res.Submit.id + " result - " + res.res); - this.Send(new SystemMessage(result)); + this.Send(new SystemMessage(result, "TestingResult")); } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |