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