From: <br...@us...> - 2008-10-07 16:01:45
|
Revision: 409 http://acmcontester.svn.sourceforge.net/acmcontester/?rev=409&view=rev Author: brus07 Date: 2008-10-07 16:01:38 +0000 (Tue, 07 Oct 2008) Log Message: ----------- Added new class architecture for Connector module. Modified Paths: -------------- ACMServer/trunk/ACMServer/Library/Connector/Connector.csproj ACMServer/trunk/ACMServer/Library/Connector/SocketClient.cs ACMServer/trunk/ACMServer/Library/Connector/SocketServer.cs ACMServer/trunk/ACMServer/Library/Connector/WebConnector.cs ACMServer/trunk/ACMServer/Tester/Form1.cs ACMServer/trunk/ACMServer/Tester/Library/SocketClientGate.cs ACMServer/trunk/ACMServer/Tester/Tester.csproj Added Paths: ----------- ACMServer/trunk/ACMServer/Library/Connector/AbstractConnector.cs ACMServer/trunk/ACMServer/Library/Connector/SocketClientTask.cs ACMServer/trunk/ACMServer/Tester/Library/WorkRunner.cs Added: ACMServer/trunk/ACMServer/Library/Connector/AbstractConnector.cs =================================================================== --- ACMServer/trunk/ACMServer/Library/Connector/AbstractConnector.cs (rev 0) +++ ACMServer/trunk/ACMServer/Library/Connector/AbstractConnector.cs 2008-10-07 16:01:38 UTC (rev 409) @@ -0,0 +1,20 @@ +using System; +using AcmContester.Library.LibraryExtention; + +namespace AcmContester.Library.Connector +{ + public abstract class AbstractConnector + { + public delegate void DataArrivedDelegate(SystemMessage message); + public event DataArrivedDelegate onDataArrived; + + protected void OnDataArrived(SystemMessage message) + { + DataArrivedDelegate tempEvent = onDataArrived; + if (tempEvent != null) + tempEvent(message); + } + + public abstract bool Send(SystemMessage message); + } +} Modified: ACMServer/trunk/ACMServer/Library/Connector/Connector.csproj =================================================================== --- ACMServer/trunk/ACMServer/Library/Connector/Connector.csproj 2008-10-07 15:08:49 UTC (rev 408) +++ ACMServer/trunk/ACMServer/Library/Connector/Connector.csproj 2008-10-07 16:01:38 UTC (rev 409) @@ -38,9 +38,11 @@ <Reference Include="System.Xml" /> </ItemGroup> <ItemGroup> + <Compile Include="AbstractConnector.cs" /> <Compile Include="Getter\IGetter.cs" /> <Compile Include="Getter\WebGetterOld.cs" /> <Compile Include="SocketClient.cs" /> + <Compile Include="SocketClientTask.cs" /> <Compile Include="SocketServer.cs" /> <Compile Include="Properties\AssemblyInfo.cs" /> <Compile Include="WebConnector.cs" /> Modified: ACMServer/trunk/ACMServer/Library/Connector/SocketClient.cs =================================================================== --- ACMServer/trunk/ACMServer/Library/Connector/SocketClient.cs 2008-10-07 15:08:49 UTC (rev 408) +++ ACMServer/trunk/ACMServer/Library/Connector/SocketClient.cs 2008-10-07 16:01:38 UTC (rev 409) @@ -4,13 +4,10 @@ namespace AcmContester.Library.Connector { - public class SocketClient + public class SocketClient: AbstractConnector { EasyClient client; - public delegate void DataArrivedDelegate(SystemMessage s); - public event DataArrivedDelegate onDataArrived; - string ip = "127.0.0.1"; int port = 4120; @@ -40,10 +37,11 @@ client.Dispose(); client = null; } - public void Send(SystemMessage message) + public override bool Send(SystemMessage message) { byte[] bytes = SystemMessage.Serialize(message); client.SendData(bytes); + return true; } private void DataArrived(object Data) @@ -51,19 +49,12 @@ SystemMessage mes = SystemMessage.Deserialize((byte[])Data); OnDataArrived(mes); } + public bool IsConnected() { if (client == null) return false; return client.IsConnected; } - - private void OnDataArrived(SystemMessage message) - { - if (onDataArrived != null) - { - onDataArrived(message); - } - } } } Added: ACMServer/trunk/ACMServer/Library/Connector/SocketClientTask.cs =================================================================== --- ACMServer/trunk/ACMServer/Library/Connector/SocketClientTask.cs (rev 0) +++ ACMServer/trunk/ACMServer/Library/Connector/SocketClientTask.cs 2008-10-07 16:01:38 UTC (rev 409) @@ -0,0 +1,37 @@ +using System; +using AcmContester.Library.LibraryExtention; + +namespace AcmContester.Library.Connector +{ + public class SocketClientTask: AbstractConnector + { + SocketClient client; + + public SocketClientTask(string IP) + { + client = new SocketClient(IP); + client.onDataArrived += base.OnDataArrived; + } + + public override bool Send(SystemMessage message) + { + return client.Send(message); + } + + public void Connect() + { + client.Connect(); + } + + public void Disconnect() + { + if (client.IsConnected() == true) + client.Disconnect(); + } + + public bool IsConnected() + { + return client.IsConnected(); + } + } +} Modified: ACMServer/trunk/ACMServer/Library/Connector/SocketServer.cs =================================================================== --- ACMServer/trunk/ACMServer/Library/Connector/SocketServer.cs 2008-10-07 15:08:49 UTC (rev 408) +++ ACMServer/trunk/ACMServer/Library/Connector/SocketServer.cs 2008-10-07 16:01:38 UTC (rev 409) @@ -5,7 +5,7 @@ namespace AcmContester.Library.Connector { - public class SocketServer + public class SocketServer: AbstractConnector { int port = 4120; EasyServer server; @@ -16,8 +16,6 @@ //unknown - nevidomyj Dictionary<int, string> cleintStatus = new Dictionary<int, string>(); - public delegate void DataArrivedDelegate(SystemMessage s); - public event DataArrivedDelegate onDataArrived; public SocketServer() { @@ -46,7 +44,7 @@ byte[] bytes = SystemMessage.Serialize(mes); server.SendData(bytes, TargetClientIndex); } - public bool Send(SystemMessage message) + public override bool Send(SystemMessage message) { List<int> freeTesters = GetFreeTesters(); if (freeTesters.Count != 0) @@ -79,13 +77,6 @@ cleintStatus[Int32.Parse(message.Description)] = "free"; OnDataArrived(message); } - private void OnDataArrived(SystemMessage message) - { - if (onDataArrived != null) - { - onDataArrived(message); - } - } public int CountClients() { Modified: ACMServer/trunk/ACMServer/Library/Connector/WebConnector.cs =================================================================== --- ACMServer/trunk/ACMServer/Library/Connector/WebConnector.cs 2008-10-07 15:08:49 UTC (rev 408) +++ ACMServer/trunk/ACMServer/Library/Connector/WebConnector.cs 2008-10-07 16:01:38 UTC (rev 409) @@ -5,13 +5,10 @@ namespace AcmContester.Library.Connector { - public class WebConnector + public class WebConnector: AbstractConnector { Timer timer = new Timer(); - public delegate void DataArrivedDelegate(SystemMessage s); - public event DataArrivedDelegate onDataArrived; - public event EventHandler onChecking; public event EventHandler onChecked; @@ -60,7 +57,7 @@ OnChecking(); SystemMessage message = getter.GetData(); OnChecked(); - DataArrived(message); + OnDataArrived(message); timer.Enabled = true; } @@ -75,17 +72,10 @@ onChecked(this, null); } - private void DataArrived(SystemMessage Data) + public override bool Send(SystemMessage message) { - if (onDataArrived != null) - { - onDataArrived(Data); - } - } - - public void Send(SystemMessage message) - { getter.Send(message); + return true; } protected void SetTimerInterval(int valueOfSeconds) Modified: ACMServer/trunk/ACMServer/Tester/Form1.cs =================================================================== --- ACMServer/trunk/ACMServer/Tester/Form1.cs 2008-10-07 15:08:49 UTC (rev 408) +++ ACMServer/trunk/ACMServer/Tester/Form1.cs 2008-10-07 16:01:38 UTC (rev 409) @@ -49,7 +49,6 @@ { socket = new SocketClientGate(textBox3.Text); socket.onAddLogText += AddText; - //socket.onDataArrived += DataArrived; } socket.Connect(); } @@ -63,8 +62,7 @@ { if (socket != null) { - if (socket.IsConnected() == true) - socket.Disconnect(); + socket.Disconnect(); socket = null; } } Modified: ACMServer/trunk/ACMServer/Tester/Library/SocketClientGate.cs =================================================================== --- ACMServer/trunk/ACMServer/Tester/Library/SocketClientGate.cs 2008-10-07 15:08:49 UTC (rev 408) +++ ACMServer/trunk/ACMServer/Tester/Library/SocketClientGate.cs 2008-10-07 16:01:38 UTC (rev 409) @@ -6,17 +6,18 @@ namespace AcmContester.Tester.Library { - class SocketClientGate: SocketClient + class SocketClientGate: SocketClientTask { private string descriptionMessage = ""; - public new delegate void DataArrivedDelegate(SystemMessage s); - public new event DataArrivedDelegate onDataArrived; + //TODO: tut vin tymchasovo, potribno bude perenesty jogo kudys dali + private WorkRunner workRunner = new WorkRunner(); public SocketClientGate(string IP) : base(IP) { base.onDataArrived +=new SocketClient.DataArrivedDelegate(SocketClientGate_onDataArrived); + workRunner.onDataArrived += Send; } void SocketClientGate_onDataArrived(SystemMessage message) @@ -27,32 +28,22 @@ return; } OnAddLogText("Receive", message.Message); - //OnDataArrived(message); + descriptionMessage = message.Description; if (message.IsType("TestingSubmit") == true) { - AddWork(message.Message); + workRunner.AddWork(message.Message); } } public new void Disconnect() { - if (thread != null) - thread.Abort(); + workRunner.Stop(); base.Disconnect(); } - private void OnDataArrived(SystemMessage message) - { - if (onDataArrived != null) - { - onDataArrived(message); - } - } - - private bool SystemMessageX(SystemMessage _message) { string message = _message.Message; @@ -63,7 +54,7 @@ { OnAddLogText("SystemReceive", message); string result = ""; - if (IsBusy() == true) + if (workRunner.IsBusy() == true) { result = "busy"; } @@ -82,87 +73,17 @@ return false; } - string source = ""; - object working = 0; - Thread thread = new Thread(new ParameterizedThreadStart(Go)); - private bool IsBusy() + public override bool Send(SystemMessage message) { - lock (working) - { - if ((int)working == 1 || (thread.ThreadState == ThreadState.Running)) - { - return true; - } - } - return false; - } + message = new SystemMessage(message); + message.Description = descriptionMessage; - private void AddWork(string message) - { - if (IsBusy() == true) - { - OnAddLogText("info", "--------- busy ---------"); - return; - } + Result res = Result.CreateFromXml(message.Message); + OnAddLogText("Send", "ID " + res.Submit.id + " result - " + res.res); - //TODO: tut potribno stavyty lock - // a znimaty vze u samomu Thread'i - // (dyv. na inshe TODO:) - lock(source) - source = message; - - //TODO: potribno jakos obnulyty status thread, - // tak shob ne potribno bulo stvorjuvaty novyj - thread = new Thread(new ParameterizedThreadStart(Go)); - thread.Start(this); + return base.Send(message); } - static void Go(object data) - { - if (data is SocketClient == false) - throw new ArgumentException(); - - SocketClientGate gate = (SocketClientGate)data; - - lock (gate.working) - gate.working = 1; - - string copySource; - //TODO: tut potribno znimaty postavlenyj lock - // toj lock postavlenyj u potoci sho vyklykav cej - lock (gate.source) - copySource = gate.source; - gate.Run(copySource); - - lock (gate.working) - gate.working = 0; - } - - void Run(string message) - { - string result; - try - { - result = Checker.Checker.GetResult(message); - } - catch (Exception ex) - { - Log log = Log.GetLog(); - log.Loging("Form1::DataArrived: Error: " + ex.Message, Log.Priority.ERR); - log.Loging("Form1::DataArrived: Error: " + ex.StackTrace, Log.Priority.ERR); - return; - } - - //TODO: ne znaju chy tut potriben lcok - lock (this) - { - Result res = Result.CreateFromXml(result); - OnAddLogText("Send", "ID " + res.Submit.id + " result - " + res.res); - this.Send(new SystemMessage(result, "TestingResult", descriptionMessage)); - } - } - - public delegate void AddLogTextDelegate(string type, string text); public event AddLogTextDelegate onAddLogText; private void OnAddLogText(string type, string text) Added: ACMServer/trunk/ACMServer/Tester/Library/WorkRunner.cs =================================================================== --- ACMServer/trunk/ACMServer/Tester/Library/WorkRunner.cs (rev 0) +++ ACMServer/trunk/ACMServer/Tester/Library/WorkRunner.cs 2008-10-07 16:01:38 UTC (rev 409) @@ -0,0 +1,105 @@ +using System; +using AcmContester.Library.LibraryExtention; +using System.Threading; +using AcmContester.Library.LibraryExtention.Data; + +namespace AcmContester.Tester.Library +{ + class WorkRunner + { + + public delegate bool DataArrivedDelegate(SystemMessage message); + public event DataArrivedDelegate onDataArrived; + + string source = ""; + object working = 0; + Thread thread = new Thread(new ParameterizedThreadStart(Go)); + + internal bool IsBusy() + { + lock (working) + { + if ((int)working == 1 || (thread.ThreadState == ThreadState.Running)) + { + return true; + } + } + return false; + } + + internal void AddWork(string message) + { + if (IsBusy() == true) + { + return; + } + + //TODO: tut potribno stavyty lock + // a znimaty vze u samomu Thread'i + // (dyv. na inshe TODO:) + lock (source) + source = message; + + //TODO: potribno jakos obnulyty status thread, + // tak shob ne potribno bulo stvorjuvaty novyj + thread = new Thread(new ParameterizedThreadStart(Go)); + thread.Start(this); + } + + static void Go(object data) + { + if (data is WorkRunner == false) + throw new ArgumentException(); + + WorkRunner gate = (WorkRunner)data; + + lock (gate.working) + gate.working = 1; + + string copySource; + //TODO: tut potribno znimaty postavlenyj lock + // toj lock postavlenyj u potoci sho vyklykav cej + lock (gate.source) + copySource = gate.source; + gate.Run(copySource); + + lock (gate.working) + gate.working = 0; + } + + void Run(string message) + { + string result; + try + { + result = Checker.Checker.GetResult(message); + } + catch (Exception ex) + { + Log log = Log.GetLog(); + log.Loging("Form1::DataArrived: Error: " + ex.Message, Log.Priority.ERR); + log.Loging("Form1::DataArrived: Error: " + ex.StackTrace, Log.Priority.ERR); + return; + } + + //TODO: ne znaju chy tut potriben lock + lock (this) + { + this.Send(new SystemMessage(result, "TestingResult")); + } + } + + private bool Send(SystemMessage systemMessage) + { + if (onDataArrived != null) + return this.onDataArrived(systemMessage); + return true; + } + + internal void Stop() + { + if (thread != null) + thread.Abort(); + } + } +} Modified: ACMServer/trunk/ACMServer/Tester/Tester.csproj =================================================================== --- ACMServer/trunk/ACMServer/Tester/Tester.csproj 2008-10-07 15:08:49 UTC (rev 408) +++ ACMServer/trunk/ACMServer/Tester/Tester.csproj 2008-10-07 16:01:38 UTC (rev 409) @@ -46,6 +46,7 @@ <Compile Include="Form1.Designer.cs"> <DependentUpon>Form1.cs</DependentUpon> </Compile> + <Compile Include="Library\WorkRunner.cs" /> <Compile Include="Program.cs" /> <Compile Include="Properties\AssemblyInfo.cs" /> <EmbeddedResource Include="Form1.resx"> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |