diff --git a/MTSC-TestServer/Program.cs b/MTSC-TestServer/Program.cs index a624b79..2bfea91 100644 --- a/MTSC-TestServer/Program.cs +++ b/MTSC-TestServer/Program.cs @@ -15,7 +15,7 @@ namespace MTSC_TestServer static void Main(string[] args) { X509Certificate2 certificate = new X509Certificate2("localhost.pfx", "psdsd"); - Server server = new Server(555); + Server server = new Server(80); server.TickRate = 60; server.ScaleUsage = true; RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(1024); diff --git a/MTSC/Common/Http/HttpMessage.cs b/MTSC/Common/Http/HttpMessage.cs index eb7cf6b..424e823 100644 --- a/MTSC/Common/Http/HttpMessage.cs +++ b/MTSC/Common/Http/HttpMessage.cs @@ -186,7 +186,7 @@ namespace MTSC.Common.Http /// Header value. public void AddGeneralHeader(GeneralHeadersEnum header, string value) { - headers.Add(generalHeaders[(int)header], value); + headers[generalHeaders[(int)header]] = value; } /// /// Add a request header to the message. @@ -195,7 +195,7 @@ namespace MTSC.Common.Http /// Header value. public void AddRequestHeader(RequestHeadersEnum requestHeader, string value) { - headers.Add(requestHeaders[(int)requestHeader], value); + headers[requestHeaders[(int)requestHeader]] = value; } /// /// Add a response header to the message. @@ -204,7 +204,7 @@ namespace MTSC.Common.Http /// Header value. public void AddResponseHeader(ResponseHeadersEnum responseHeader, string value) { - headers.Add(responseHeaders[(int)responseHeader], value); + headers[responseHeaders[(int)responseHeader]] = value; } /// /// Add an entity header to the message. @@ -213,7 +213,7 @@ namespace MTSC.Common.Http /// Header value. public void AddEntityHeaders(EntityHeadersEnum entityHeader, string value) { - headers.Add(entityHeaders[(int)entityHeader], value); + headers[entityHeaders[(int)entityHeader]] = value; } /// /// Build the request bytes based on the message contents. diff --git a/MTSC/Server/Handlers/HttpHandler.cs b/MTSC/Server/Handlers/HttpHandler.cs index 968e7a2..ecb4904 100644 --- a/MTSC/Server/Handlers/HttpHandler.cs +++ b/MTSC/Server/Handlers/HttpHandler.cs @@ -2,8 +2,10 @@ using MTSC.Common.Http; using MTSC.Common.Http.ServerModules; using System; +using System.Collections.Concurrent; using System.Collections.Generic; using System.Text; +using System.Threading; namespace MTSC.Server.Handlers { @@ -14,7 +16,8 @@ namespace MTSC.Server.Handlers { #region Fields List httpModules = new List(); - Queue> messageQueue = new Queue>(); + ConcurrentQueue> messageQueue = new ConcurrentQueue>(); + object queueLock = new object(); #endregion #region Constructors public HttpHandler() @@ -37,7 +40,7 @@ namespace MTSC.Server.Handlers /// Send a response back to the client. /// /// Message containing the response. - public void SendResponse(ClientData client, HttpMessage response) + public void QueueResponse(ClientData client, HttpMessage response) { messageQueue.Enqueue(new Tuple(client, response)); } @@ -88,7 +91,7 @@ namespace MTSC.Server.Handlers break; } } - SendResponse(client, responseMessage); + QueueResponse(client, responseMessage); return false; } /// @@ -116,10 +119,13 @@ namespace MTSC.Server.Handlers /// void IHandler.Tick(Server server) { - while(messageQueue.Count > 0) + while (messageQueue.Count > 0) { - Tuple tuple = messageQueue.Dequeue(); - server.QueueMessage(tuple.Item1, tuple.Item2.GetResponse(true)); + Tuple tuple = null; + if (messageQueue.TryDequeue(out tuple)) + { + server.QueueMessage(tuple.Item1, tuple.Item2.GetResponse(true)); + } } } #endregion diff --git a/MTSC/Server/Server.cs b/MTSC/Server/Server.cs index fd64898..88909a2 100644 --- a/MTSC/Server/Server.cs +++ b/MTSC/Server/Server.cs @@ -296,13 +296,13 @@ namespace MTSC.Server } } }); - foreach(IHandler handler in handlers) + Parallel.ForEach(handlers, (handler) => { try { handler.Tick(this); } - catch(Exception e) + catch (Exception e) { LogDebug("Exception: " + e.Message); LogDebug("Stacktrace: " + e.StackTrace); @@ -314,7 +314,7 @@ namespace MTSC.Server } } } - } + }); /* * Check if there are messages queued to be sent. */