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