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