|
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.
|