From: <br...@us...> - 2008-09-20 21:41:05
|
Revision: 364 http://acmcontester.svn.sourceforge.net/acmcontester/?rev=364&view=rev Author: brus07 Date: 2008-09-20 21:40:46 +0000 (Sat, 20 Sep 2008) Log Message: ----------- Added new class for working with pool of works. Modified Paths: -------------- ACMServer/trunk/ACMServer/Plugins/MediatorPlugins/SocketServerGatePlugin/SocketServerGate.cs ACMServer/trunk/ACMServer/Plugins/MediatorPlugins/SocketServerGatePlugin/SocketServerGatePlugin.csproj Added Paths: ----------- ACMServer/trunk/ACMServer/Plugins/MediatorPlugins/SocketServerGatePlugin/WorkingPool.cs Modified: ACMServer/trunk/ACMServer/Plugins/MediatorPlugins/SocketServerGatePlugin/SocketServerGate.cs =================================================================== --- ACMServer/trunk/ACMServer/Plugins/MediatorPlugins/SocketServerGatePlugin/SocketServerGate.cs 2008-09-20 20:31:56 UTC (rev 363) +++ ACMServer/trunk/ACMServer/Plugins/MediatorPlugins/SocketServerGatePlugin/SocketServerGate.cs 2008-09-20 21:40:46 UTC (rev 364) @@ -19,10 +19,13 @@ DataMediator dataContainer = new DataMediator(); + WorkingPool pool = new WorkingPool(); + private SocketServerGate() { base.Start(); base.onDataArrived += DataArrived; + pool.onSendData += base.Send; } public static SocketServerGate GetInstance() { @@ -39,56 +42,6 @@ } } - 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(), "TestingSubmit"); - lock (poolWork) - { - poolWork.Add(sysMes, null); - } - startPool(); - } - } - 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); - } - } private void GenerateLogMessageWirhIDs(SubmitList submitList) { @@ -112,7 +65,11 @@ for (int index = 0; index < submitList.Items.Length; index++) { - Send2(submitList.Items[index]); + if (dataContainer.Contains(submitList.Items[index]) == false) + { + SystemMessage sysMes = new SystemMessage(submitList.Items[index].ToString(), "TestingSubmit"); + pool.Send(sysMes); + } } return true; } Modified: ACMServer/trunk/ACMServer/Plugins/MediatorPlugins/SocketServerGatePlugin/SocketServerGatePlugin.csproj =================================================================== --- ACMServer/trunk/ACMServer/Plugins/MediatorPlugins/SocketServerGatePlugin/SocketServerGatePlugin.csproj 2008-09-20 20:31:56 UTC (rev 363) +++ ACMServer/trunk/ACMServer/Plugins/MediatorPlugins/SocketServerGatePlugin/SocketServerGatePlugin.csproj 2008-09-20 21:40:46 UTC (rev 364) @@ -44,6 +44,7 @@ <Compile Include="SocketServerGatePluginUserControl.Designer.cs"> <DependentUpon>SocketServerGatePluginUserControl.cs</DependentUpon> </Compile> + <Compile Include="WorkingPool.cs" /> </ItemGroup> <ItemGroup> <ProjectReference Include="..\..\..\Library\Connector\Connector.csproj"> Added: ACMServer/trunk/ACMServer/Plugins/MediatorPlugins/SocketServerGatePlugin/WorkingPool.cs =================================================================== --- ACMServer/trunk/ACMServer/Plugins/MediatorPlugins/SocketServerGatePlugin/WorkingPool.cs (rev 0) +++ ACMServer/trunk/ACMServer/Plugins/MediatorPlugins/SocketServerGatePlugin/WorkingPool.cs 2008-09-20 21:40:46 UTC (rev 364) @@ -0,0 +1,70 @@ +using System; +using AcmContester.Library.LibraryExtention; +using System.Collections.Generic; +using System.Threading; + +namespace AcmContester.Plugins.MediatorPlugins.SocketServerGatePlugin +{ + class WorkingPool + { + internal delegate bool SebdDataDelegate(SystemMessage s); + internal event SebdDataDelegate onSendData; + + + Dictionary<SystemMessage, object> poolWork = new Dictionary<SystemMessage, object>(); + bool poolWorking = false; + + private bool OnSendData(SystemMessage sysMes) + { + if (onSendData != null) + return onSendData(sysMes); + return false; + } + + 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 (OnSendData(sysMes) == true) + { + poolWork.Remove(sysMes); + break; + } + } + } + } + poolWorking = false; + } + private static void RunningPool(Object ob) + { + WorkingPool ssg = (WorkingPool)ob; + ssg.runPool(); + } + private void startPool() + { + if (poolWorking == false) + { + ThreadPool.QueueUserWorkItem(RunningPool, this); + } + } + + internal void Send(SystemMessage sysMes) + { + lock (poolWork) + { + poolWork.Add(sysMes, null); + } + startPool(); + } + } +} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <br...@us...> - 2008-12-08 11:06:29
|
Revision: 438 http://acmcontester.svn.sourceforge.net/acmcontester/?rev=438&view=rev Author: brus07 Date: 2008-12-08 11:06:24 +0000 (Mon, 08 Dec 2008) Log Message: ----------- Fixed bug with multiple times add to queue of submits. Added new log SystemMessage in SocketServerGate. Modified Paths: -------------- ACMServer/trunk/ACMServer/Plugins/MediatorPlugins/SocketServerGatePlugin/SocketServerGate.cs ACMServer/trunk/ACMServer/Plugins/MediatorPlugins/SocketServerGatePlugin/WorkingPool.cs Modified: ACMServer/trunk/ACMServer/Plugins/MediatorPlugins/SocketServerGatePlugin/SocketServerGate.cs =================================================================== --- ACMServer/trunk/ACMServer/Plugins/MediatorPlugins/SocketServerGatePlugin/SocketServerGate.cs 2008-12-07 21:57:19 UTC (rev 437) +++ ACMServer/trunk/ACMServer/Plugins/MediatorPlugins/SocketServerGatePlugin/SocketServerGate.cs 2008-12-08 11:06:24 UTC (rev 438) @@ -37,11 +37,8 @@ if (message.IsType("TestingSubmit") == true) { Submit submit = Submit.CreateFromXml(message.Message); - if (dataContainer.Add(submit) == true) - { - OnLogMessage("Send", submit.id + " to " + clientIndex); - base.DataSender(message, clientIndex); - } + OnLogMessage("Send", submit.id + " to " + clientIndex); + base.DataSender(message, clientIndex); return; } @@ -71,11 +68,16 @@ for (int index = 0; index < submitList.Items.Length; index++) { - if (dataContainer.Contains(submitList.Items[index]) == false) + if (dataContainer.Add(submitList.Items[index]) == true) { SystemMessage sysMes = new SystemMessage(submitList.Items[index].ToString(), "TestingSubmit"); + OnLogMessage("SystemSend", submitList.Items[index].id + " to Pool"); pool.Send(sysMes); } + else + { + OnLogMessage("SystemReceive", submitList.Items[index].id + "is in queue"); + } } return true; } Modified: ACMServer/trunk/ACMServer/Plugins/MediatorPlugins/SocketServerGatePlugin/WorkingPool.cs =================================================================== --- ACMServer/trunk/ACMServer/Plugins/MediatorPlugins/SocketServerGatePlugin/WorkingPool.cs 2008-12-07 21:57:19 UTC (rev 437) +++ ACMServer/trunk/ACMServer/Plugins/MediatorPlugins/SocketServerGatePlugin/WorkingPool.cs 2008-12-08 11:06:24 UTC (rev 438) @@ -2,13 +2,14 @@ using AcmContester.Library.LibraryExtention; using System.Collections.Generic; using System.Threading; +using AcmContester.Library.LibraryExtention.Data; namespace AcmContester.Plugins.MediatorPlugins.SocketServerGatePlugin { class WorkingPool { - internal delegate bool SebdDataDelegate(SystemMessage s); - internal event SebdDataDelegate onSendData; + internal delegate bool SendDataDelegate(SystemMessage s); + internal event SendDataDelegate onSendData; private bool OnSendData(SystemMessage sysMes) { @@ -18,7 +19,7 @@ return false; } - private Dictionary<SystemMessage, object> poolWork = new Dictionary<SystemMessage, object>(); + private Dictionary<int, SystemMessage> poolWork = new Dictionary<int, SystemMessage>(); private bool poolWorking = false; private void runPool() @@ -33,12 +34,13 @@ { if (poolWork.Count == 0) break; - foreach (SystemMessage sysMes in poolWork.Keys) + foreach (int key in poolWork.Keys) { + SystemMessage sysMes = poolWork[key]; //TODO: potribno zrobyty, shob pry posylci "poolWork" ne buv zalokanyj if (OnSendData(sysMes) == true) { - poolWork.Remove(sysMes); + poolWork.Remove(key); break; } } @@ -63,7 +65,13 @@ { lock (poolWork) { - poolWork.Add(sysMes, null); + if (sysMes.IsType("TestingSubmit")) + { + //TODO: \xEF\xEE\xF2\xF0\xB3\xE1\xED\xEE \xE1\xF3\xE4\xE5 \xF6\xE5 \xE7\xE2\xB3\xE4\xF1\xE8 \xE7\xE0\xE1\xF0\xE0\xF2\xE8 + Submit submit = Submit.CreateFromXml(sysMes.Message); + if (poolWork.ContainsKey(submit.id) == false) + poolWork.Add(submit.id, sysMes); + } } startPool(); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |