|
From: <br...@us...> - 2008-10-07 20:32:42
|
Revision: 410
http://acmcontester.svn.sourceforge.net/acmcontester/?rev=410&view=rev
Author: brus07
Date: 2008-10-07 20:32:33 +0000 (Tue, 07 Oct 2008)
Log Message:
-----------
Preparing commit.
Added Paths:
-----------
ACMServer/trunk/ACMServer/Library/Connector/SocketServer.cs
ACMServer/trunk/ACMServer/Library/Connector/SocketServerTask.cs
Removed Paths:
-------------
ACMServer/trunk/ACMServer/Library/Connector/SocketServer.cs
Deleted: ACMServer/trunk/ACMServer/Library/Connector/SocketServer.cs
===================================================================
--- ACMServer/trunk/ACMServer/Library/Connector/SocketServer.cs 2008-10-07 16:01:38 UTC (rev 409)
+++ ACMServer/trunk/ACMServer/Library/Connector/SocketServer.cs 2008-10-07 20:32:33 UTC (rev 410)
@@ -1,190 +0,0 @@
-using System;
-using JadBenAutho.EasySocket;
-using System.Collections.Generic;
-using AcmContester.Library.LibraryExtention;
-
-namespace AcmContester.Library.Connector
-{
- public class SocketServer: AbstractConnector
- {
- int port = 4120;
- EasyServer server;
-
- //val:
- //free - vilnyj
- //busy - zajnjatyj
- //unknown - nevidomyj
- Dictionary<int, string> cleintStatus = new Dictionary<int, string>();
-
-
- public SocketServer()
- {
- server = new EasyServer(port, true);
- server.DataArrived += new DataArrived2Server_EventHandler(DataArrived);
- }
-
- public void Start()
- {
- if (server == null)
- server = new EasyServer(port, true);
- server.StartListen();
- }
- public void Stop()
- {
- if (server != null)
- {
- server.StopListen();
- server.Dispose();
- server = null;
- }
- }
-
- private void ServerSend(SystemMessage mes, int TargetClientIndex)
- {
- byte[] bytes = SystemMessage.Serialize(mes);
- server.SendData(bytes, TargetClientIndex);
- }
- public override 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)
- {
- cleintStatus[server.ClientsList[clientIndex].GetHashCode()] = "busy";
- message.Description = server.ClientsList[clientIndex].GetHashCode().ToString();
- ServerSend(message, clientIndex);
- }
-
- private void DataArrived(object Data, SocketStream DataSender)
- {
- SystemMessage sysMes = SystemMessage.Deserialize((byte[])Data);
- if (sysMes.IsType("SystemTestBusyMessage") == true)
- {
- if (SystemMessageX(sysMes) == true)
- return;
- }
- DataArriver(sysMes);
- }
- protected virtual void DataArriver(SystemMessage message)
- {
- cleintStatus[Int32.Parse(message.Description)] = "free";
- OnDataArrived(message);
- }
-
- public int CountClients()
- {
- return server.CountClients;
- }
-
-
- Queue<string> q = new Queue<string>();
-
- /// <summary>
- /// \xCF\xEE\xE2\xE5\xF0\xF2\xE0\xBA \xF1\xEF\xE8\xF1\xEE\xEA \xE2\xB3\xEB\xFC\xED\xE8\xF5 \xF2\xE5\xF1\xF2\xE5\xF0\xB3\xE2.
- /// ³\xE4\xEF\xF0\xE0\xE2\xEB\xFF\xBA \xEA\xEE\xE6\xED\xEE\xEC\xF3 \xF2\xE5\xF1\xF2\xE5\xF0\xF3 \xEF\xEE\xE2\xB3\xE4\xEE\xEC\xEB\xE5\xED\xED\xFF \xE2\xE8\xE3\xEB\xFF\xE4\xF3:
- /// test HashCodeTester HashCode\xC7\xE0\xEF\xE8\xF2\xF3
- /// \xC4\xE5 HashCode\xC7\xE0\xEF\xE8\xF2\xF3 - \xF6\xE5 \xF3\xED\xB3\xEA\xE0\xEB\xFC\xED\xE8\xE9 \xF5\xE5\xF8 \xEA\xEE\xE4 \xEA\xEE\xE6\xED\xEE\xE3\xEE \xF2\xE0\xEA\xEE\xE3\xEE \xE7\xE0\xEF\xE8\xF2\xF3.
- /// \xCF\xEE\xF2\xB3\xEC \xF7\xE5\xEA\xE0\xBA \xEE\xE4\xED\xF3 (1) \xF1\xE5\xEA\xF3\xED\xE4\xF3 \xEA\xEE\xEB\xE8 \xE7\xE0\xEF\xEE\xE2\xED\xE8\xF2\xFC\xF1\xFF q \xF1\xEF\xE8\xF1\xEA\xEE\xEC \xEF\xF0\xE8\xF1\xEB\xE0\xED\xE8\xF5 \xEF\xEE\xE2\xB3\xE4\xEE\xEC\xEB\xE5\xED\xFC
- /// \xDF\xEA\xF9\xEE \xF2\xE5\xF1\xF2\xE5\xF0 \xEF\xEE\xE2\xB3\xE4\xEE\xEC\xEB\xFF\xBA \xF9\xEE \xE2\xB3\xED \xE2\xB3\xEB\xFC\xED\xE8\xE9, \xF2\xEE\xE4\xB3 \xE9\xEE\xE3\xEE \xED\xEE\xEC\xE5\xF0 \xE7\xE0\xED\xEE\xF1\xE8\xF2\xFC\xF1\xFF \xE4\xEE \xF0\xE5\xE7\xF3\xEB\xFC\xF2\xE0\xF2\xF3.
- /// </summary>
- /// <returns>\xD1\xEF\xE8\xF1\xEE\xEA \xE2\xB3\xEB\xFC\xED\xE8\xF5 \xF2\xE5\xF1\xF2\xE5\xF0\xB3\xE2</returns>
- private List<int> GetFreeTesters()
- {
- if (server == null)
- {
- return new List<int>();
- }
-
- q.Clear();
- string curHashCode = DateTime.Now.GetHashCode().ToString();
- for (int i = 0; i < server.CountClients; i++)
- {
- if (cleintStatus.ContainsKey(server.ClientsList[i].GetHashCode()) == false)
- {
- cleintStatus[server.ClientsList[i].GetHashCode()] = "unknown";
- }
- if (cleintStatus[server.ClientsList[i].GetHashCode()] == "unknown")
- {
- string message = "test";
- message += " " + server.ClientsList[i].GetHashCode().ToString();
- message += " " + curHashCode;
- SystemMessage mes = new SystemMessage(message, "SystemTestBusyMessage");
- ServerSend(mes, i);
- }
- }
-
- DateTime start = DateTime.Now;
- Dictionary<string, int> preResult = new Dictionary<string, int>();
- while (server != null && preResult.Count < server.CountClients)
- {
- if (((TimeSpan)(DateTime.Now - start)).TotalSeconds > 1.0)
- {
- break;
- }
- lock (q)
- {
- while (q.Count != 0)
- {
- string curStr = q.Dequeue();
- char[] chars = new char[1];
- chars[0] = ' ';
- string[] mes = curStr.Split(chars);
- if (mes[0] == "free" && curHashCode == mes[2])
- {
- cleintStatus[Int32.Parse(mes[1])] = "free";
- preResult.Add(mes[1], 0);
- }
- else
- {
- if (mes[0] == "busy")
- {
- cleintStatus[Int32.Parse(mes[1])] = "busy";
- }
- }
- }
- }
- System.Threading.Thread.Sleep(50);
- }
-
- List<int> result = new List<int>();
- for (int i = 0; i < server.CountClients; i++)
- {
- if (cleintStatus.ContainsKey(server.ClientsList[i].GetHashCode()) == false)
- cleintStatus[server.ClientsList[i].GetHashCode()] = "unknown";
- if (cleintStatus[server.ClientsList[i].GetHashCode()] == "free")
- result.Add(i);
- //string hashCode = server.ClientsList[i].GetHashCode().ToString();
- //if (preResult.ContainsKey(hashCode) == true)
- // result.Add(i);
- }
- return result;
- }
-
- /// <summary>
- /// \xCF\xE5\xF0\xE5\xE2\xB3\xF0\xE0\xBA \xF7\xE8 \xF6\xE5 \xF1\xEB\xF3\xE6\xE1\xEE\xE2\xE5 \xEF\xEE\xE2\xB3\xE4\xEE\xEC\xEB\xE5\xED\xED\xFF.
- /// \xDF\xEA\xF9\xEE \xF1\xEB\xF3\xE6\xE1\xEE\xE2\xE5, \xF2\xEE\xE4\xB3 \xE2\xEE\xED\xEE \xE7\xE0\xED\xEE\xF1\xE8\xF2\xFC\xF1\xFF \xE4\xEE \xF1\xEF\xE8\xF1\xEA\xF3 q
- /// </summary>
- /// <param name="message">\xCF\xEE\xE2\xB3\xE4\xEE\xEC\xEB\xE5\xED\xED\xFF</param>
- /// <returns>\xDF\xEA\xF9\xEE \xF6\xE5 \xF1\xEB\xF3\xE6\xE1\xEE\xE2\xE5 \xEF\xEE\xE2\xB3\xE4\xEE\xEC\xEB\xE5\xED\xED\xFF, \xF2\xEE\xE4\xB3 \xEF\xEE\xE2\xE5\xF0\xF2\xE0\xBA\xF2\xFC\xF1\xFF true \xEF\xEE \xB3\xED\xE0\xEA\xF8\xEE\xEC\xF3 false</returns>
- private bool SystemMessageX(SystemMessage message)
- {
- char[] chars = new char[1];
- chars[0] = ' ';
- string[] mes = message.Message.Split(chars);
- if (mes[0] == "busy" || mes[0] == "free")
- {
- lock(q)
- q.Enqueue(message.Message);
- return true;
- }
- return false;
- }
- }
-}
Added: ACMServer/trunk/ACMServer/Library/Connector/SocketServer.cs
===================================================================
--- ACMServer/trunk/ACMServer/Library/Connector/SocketServer.cs (rev 0)
+++ ACMServer/trunk/ACMServer/Library/Connector/SocketServer.cs 2008-10-07 20:32:33 UTC (rev 410)
@@ -0,0 +1,79 @@
+using System;
+using AcmContester.Library.LibraryExtention;
+using JadBenAutho.EasySocket;
+
+namespace AcmContester.Library.Connector
+{
+ public class SocketServer: AbstractConnector
+ {
+ int port = 4120;
+ EasyServer server;
+
+ private void init()
+ {
+ server = new EasyServer(port, true);
+ server.DataArrived += DataArrived;
+ }
+
+ public SocketServer()
+ {
+ init();
+ }
+ public SocketServer(int Port)
+ {
+ this.port = Port;
+ init();
+ }
+
+ public void Start()
+ {
+ if (server == null)
+ server = new EasyServer(port, true);
+ server.StartListen();
+ }
+ public void Stop()
+ {
+ if (server != null)
+ {
+ server.StopListen();
+ server.Dispose();
+ server = null;
+ }
+ }
+ public int CountClients
+ {
+ get
+ {
+ return server.CountClients;
+ }
+ }
+
+ public virtual bool Send(SystemMessage mes, int TargetClientIndex)
+ {
+ byte[] bytes = SystemMessage.Serialize(mes);
+ return server.SendData(bytes, TargetClientIndex);
+ }
+
+ public override bool Send(SystemMessage message)
+ {
+ //TODO: jogo ne mozna juzaty u cjomu vypadku
+ throw new Exception("The method or operation is not implemented.");
+ }
+
+ private void DataArrived(object Data, SocketStream DataSender)
+ {
+ SystemMessage sysMes = SystemMessage.Deserialize((byte[])Data);
+ OnDataArrived(sysMes);
+ }
+
+ //TODO: tymchasovo haj bude
+ // ale potim potribno bude braty hash naprjami iz realnogo Client'a (haj persylajutsja)
+ public SocketsList ClientsList
+ {
+ get
+ {
+ return server.ClientsList;
+ }
+ }
+ }
+}
Copied: ACMServer/trunk/ACMServer/Library/Connector/SocketServerTask.cs (from rev 409, ACMServer/trunk/ACMServer/Library/Connector/SocketServer.cs)
===================================================================
--- ACMServer/trunk/ACMServer/Library/Connector/SocketServerTask.cs (rev 0)
+++ ACMServer/trunk/ACMServer/Library/Connector/SocketServerTask.cs 2008-10-07 20:32:33 UTC (rev 410)
@@ -0,0 +1,180 @@
+using System;
+using JadBenAutho.EasySocket;
+using System.Collections.Generic;
+using AcmContester.Library.LibraryExtention;
+
+namespace AcmContester.Library.Connector
+{
+ public class SocketServerTask: AbstractConnector
+ {
+ SocketServer server;
+
+ //val:
+ //free - vilnyj
+ //busy - zajnjatyj
+ //unknown - nevidomyj
+ Dictionary<int, string> cleintStatus = new Dictionary<int, string>();
+
+
+ public SocketServerTask()
+ {
+ server = new SocketServer();
+ server.onDataArrived += DataArrived;
+ }
+
+ public void Start()
+ {
+ server.Start();
+ }
+ public void Stop()
+ {
+ server.Stop();
+ }
+
+ private bool ServerSend(SystemMessage mes, int TargetClientIndex)
+ {
+ return server.Send(mes, TargetClientIndex);
+ }
+ public override 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)
+ {
+ cleintStatus[server.ClientsList[clientIndex].GetHashCode()] = "busy";
+ message.Description = server.ClientsList[clientIndex].GetHashCode().ToString();
+ ServerSend(message, clientIndex);
+ }
+
+ private void DataArrived(SystemMessage sysMes)
+ {
+ if (sysMes.IsType("SystemTestBusyMessage") == true)
+ {
+ if (SystemMessageX(sysMes) == true)
+ return;
+ }
+ DataArriver(sysMes);
+ }
+ protected virtual void DataArriver(SystemMessage message)
+ {
+ cleintStatus[Int32.Parse(message.Description)] = "free";
+ OnDataArrived(message);
+ }
+
+ public int CountClients()
+ {
+ return server.CountClients;
+ }
+
+
+ Queue<string> q = new Queue<string>();
+
+ /// <summary>
+ /// \xCF\xEE\xE2\xE5\xF0\xF2\xE0\xBA \xF1\xEF\xE8\xF1\xEE\xEA \xE2\xB3\xEB\xFC\xED\xE8\xF5 \xF2\xE5\xF1\xF2\xE5\xF0\xB3\xE2.
+ /// ³\xE4\xEF\xF0\xE0\xE2\xEB\xFF\xBA \xEA\xEE\xE6\xED\xEE\xEC\xF3 \xF2\xE5\xF1\xF2\xE5\xF0\xF3 \xEF\xEE\xE2\xB3\xE4\xEE\xEC\xEB\xE5\xED\xED\xFF \xE2\xE8\xE3\xEB\xFF\xE4\xF3:
+ /// test HashCodeTester HashCode\xC7\xE0\xEF\xE8\xF2\xF3
+ /// \xC4\xE5 HashCode\xC7\xE0\xEF\xE8\xF2\xF3 - \xF6\xE5 \xF3\xED\xB3\xEA\xE0\xEB\xFC\xED\xE8\xE9 \xF5\xE5\xF8 \xEA\xEE\xE4 \xEA\xEE\xE6\xED\xEE\xE3\xEE \xF2\xE0\xEA\xEE\xE3\xEE \xE7\xE0\xEF\xE8\xF2\xF3.
+ /// \xCF\xEE\xF2\xB3\xEC \xF7\xE5\xEA\xE0\xBA \xEE\xE4\xED\xF3 (1) \xF1\xE5\xEA\xF3\xED\xE4\xF3 \xEA\xEE\xEB\xE8 \xE7\xE0\xEF\xEE\xE2\xED\xE8\xF2\xFC\xF1\xFF q \xF1\xEF\xE8\xF1\xEA\xEE\xEC \xEF\xF0\xE8\xF1\xEB\xE0\xED\xE8\xF5 \xEF\xEE\xE2\xB3\xE4\xEE\xEC\xEB\xE5\xED\xFC
+ /// \xDF\xEA\xF9\xEE \xF2\xE5\xF1\xF2\xE5\xF0 \xEF\xEE\xE2\xB3\xE4\xEE\xEC\xEB\xFF\xBA \xF9\xEE \xE2\xB3\xED \xE2\xB3\xEB\xFC\xED\xE8\xE9, \xF2\xEE\xE4\xB3 \xE9\xEE\xE3\xEE \xED\xEE\xEC\xE5\xF0 \xE7\xE0\xED\xEE\xF1\xE8\xF2\xFC\xF1\xFF \xE4\xEE \xF0\xE5\xE7\xF3\xEB\xFC\xF2\xE0\xF2\xF3.
+ /// </summary>
+ /// <returns>\xD1\xEF\xE8\xF1\xEE\xEA \xE2\xB3\xEB\xFC\xED\xE8\xF5 \xF2\xE5\xF1\xF2\xE5\xF0\xB3\xE2</returns>
+ private List<int> GetFreeTesters()
+ {
+ if (server == null)
+ {
+ return new List<int>();
+ }
+
+ q.Clear();
+ string curHashCode = DateTime.Now.GetHashCode().ToString();
+ for (int i = 0; i < server.CountClients; i++)
+ {
+ if (cleintStatus.ContainsKey(server.ClientsList[i].GetHashCode()) == false)
+ {
+ cleintStatus[server.ClientsList[i].GetHashCode()] = "unknown";
+ }
+ if (cleintStatus[server.ClientsList[i].GetHashCode()] == "unknown")
+ {
+ string message = "test";
+ message += " " + server.ClientsList[i].GetHashCode().ToString();
+ message += " " + curHashCode;
+ SystemMessage mes = new SystemMessage(message, "SystemTestBusyMessage");
+ ServerSend(mes, i);
+ }
+ }
+
+ DateTime start = DateTime.Now;
+ Dictionary<string, int> preResult = new Dictionary<string, int>();
+ while (server != null && preResult.Count < server.CountClients)
+ {
+ if (((TimeSpan)(DateTime.Now - start)).TotalSeconds > 1.0)
+ {
+ break;
+ }
+ lock (q)
+ {
+ while (q.Count != 0)
+ {
+ string curStr = q.Dequeue();
+ char[] chars = new char[1];
+ chars[0] = ' ';
+ string[] mes = curStr.Split(chars);
+ if (mes[0] == "free" && curHashCode == mes[2])
+ {
+ cleintStatus[Int32.Parse(mes[1])] = "free";
+ preResult.Add(mes[1], 0);
+ }
+ else
+ {
+ if (mes[0] == "busy")
+ {
+ cleintStatus[Int32.Parse(mes[1])] = "busy";
+ }
+ }
+ }
+ }
+ System.Threading.Thread.Sleep(50);
+ }
+
+ List<int> result = new List<int>();
+ for (int i = 0; i < server.CountClients; i++)
+ {
+ if (cleintStatus.ContainsKey(server.ClientsList[i].GetHashCode()) == false)
+ cleintStatus[server.ClientsList[i].GetHashCode()] = "unknown";
+ if (cleintStatus[server.ClientsList[i].GetHashCode()] == "free")
+ result.Add(i);
+ //string hashCode = server.ClientsList[i].GetHashCode().ToString();
+ //if (preResult.ContainsKey(hashCode) == true)
+ // result.Add(i);
+ }
+ return result;
+ }
+
+ /// <summary>
+ /// \xCF\xE5\xF0\xE5\xE2\xB3\xF0\xE0\xBA \xF7\xE8 \xF6\xE5 \xF1\xEB\xF3\xE6\xE1\xEE\xE2\xE5 \xEF\xEE\xE2\xB3\xE4\xEE\xEC\xEB\xE5\xED\xED\xFF.
+ /// \xDF\xEA\xF9\xEE \xF1\xEB\xF3\xE6\xE1\xEE\xE2\xE5, \xF2\xEE\xE4\xB3 \xE2\xEE\xED\xEE \xE7\xE0\xED\xEE\xF1\xE8\xF2\xFC\xF1\xFF \xE4\xEE \xF1\xEF\xE8\xF1\xEA\xF3 q
+ /// </summary>
+ /// <param name="message">\xCF\xEE\xE2\xB3\xE4\xEE\xEC\xEB\xE5\xED\xED\xFF</param>
+ /// <returns>\xDF\xEA\xF9\xEE \xF6\xE5 \xF1\xEB\xF3\xE6\xE1\xEE\xE2\xE5 \xEF\xEE\xE2\xB3\xE4\xEE\xEC\xEB\xE5\xED\xED\xFF, \xF2\xEE\xE4\xB3 \xEF\xEE\xE2\xE5\xF0\xF2\xE0\xBA\xF2\xFC\xF1\xFF true \xEF\xEE \xB3\xED\xE0\xEA\xF8\xEE\xEC\xF3 false</returns>
+ private bool SystemMessageX(SystemMessage message)
+ {
+ char[] chars = new char[1];
+ chars[0] = ' ';
+ string[] mes = message.Message.Split(chars);
+ if (mes[0] == "busy" || mes[0] == "free")
+ {
+ lock(q)
+ q.Enqueue(message.Message);
+ return true;
+ }
+ return false;
+ }
+ }
+}
Property changes on: ACMServer/trunk/ACMServer/Library/Connector/SocketServerTask.cs
___________________________________________________________________
Added: svn:mergeinfo
+
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|