fuck websocketsharp
time to die
This commit is contained in:
parent
ce6ad8d567
commit
91c4ce5360
9 changed files with 152 additions and 36 deletions
|
@ -56,8 +56,12 @@
|
||||||
<Reference Include="System.Xml" />
|
<Reference Include="System.Xml" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Compile Include="Server.cs" />
|
<Compile Include="Entrypoint.cs" />
|
||||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||||
|
<Compile Include="Websocket\Connection.cs" />
|
||||||
|
<Compile Include="Websocket\Pool.cs" />
|
||||||
|
<Compile Include="Websocket\Server.cs" />
|
||||||
|
<Compile Include="Websocket\Stack.cs" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<None Include="App.config" />
|
<None Include="App.config" />
|
13
server/Entrypoint.cs
Normal file
13
server/Entrypoint.cs
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace CircleScape {
|
||||||
|
class Entrypoint {
|
||||||
|
static void Main(string[] args) {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,33 +0,0 @@
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using WebSocketSharp;
|
|
||||||
using WebSocketSharp.Server;
|
|
||||||
|
|
||||||
namespace CircleScape {
|
|
||||||
class Connection : WebSocketBehavior {
|
|
||||||
Connection() {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
protected override void OnOpen() {
|
|
||||||
if()
|
|
||||||
}
|
|
||||||
|
|
||||||
protected override void OnMessage(MessageEventArgs e) {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
protected override void OnClose(CloseEventArgs e) {
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class Server {
|
|
||||||
static void Main(string[] args) {
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
11
server/Websocket/Connection.cs
Normal file
11
server/Websocket/Connection.cs
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace CircleScape.Websocket {
|
||||||
|
class Connection {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
63
server/Websocket/Pool.cs
Normal file
63
server/Websocket/Pool.cs
Normal file
|
@ -0,0 +1,63 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading;
|
||||||
|
|
||||||
|
namespace CircleScape.Websocket {
|
||||||
|
class Pool {
|
||||||
|
private const int InitialCount = 3;
|
||||||
|
private const int InitialSize = 3;
|
||||||
|
private const int SizeGrowth = 1;
|
||||||
|
private const int MaxSize = 10;
|
||||||
|
|
||||||
|
private int _fullThreadCount;
|
||||||
|
private bool updateFullThreadCount = true;
|
||||||
|
|
||||||
|
private List<ThreadContext> Threads
|
||||||
|
= new List<ThreadContext>();
|
||||||
|
private Dictionary<UInt64, Connection> Connections
|
||||||
|
= new Dictionary<UInt64, Connection>();
|
||||||
|
|
||||||
|
public Pool() {
|
||||||
|
for(var i = 0; i < InitialCount; ++i) {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool AddConnection(Connection connection) {
|
||||||
|
foreach(var thread in Threads) {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private ThreadContext CreateThread(Connection initialConnection = null) {
|
||||||
|
var stack = new Stack(true);
|
||||||
|
var ctx = new ThreadContext {
|
||||||
|
Stack = stack,
|
||||||
|
Thread = new Thread(new ThreadStart(stack.ManageStack))
|
||||||
|
};
|
||||||
|
|
||||||
|
Threads.Add(ctx);
|
||||||
|
return ctx;
|
||||||
|
}
|
||||||
|
|
||||||
|
private int FullThreadCount {
|
||||||
|
get {
|
||||||
|
if(updateFullThreadCount) {
|
||||||
|
_fullThreadCount = Math.Min(
|
||||||
|
MaxSize,
|
||||||
|
InitialSize + SizeGrowth * (Threads.Count - InitialCount)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
return _fullThreadCount;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class ThreadContext {
|
||||||
|
public Thread Thread { get; set; }
|
||||||
|
public Stack Stack { get; set; }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
11
server/Websocket/Server.cs
Normal file
11
server/Websocket/Server.cs
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace CircleScape.Websocket {
|
||||||
|
class Server {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
48
server/Websocket/Stack.cs
Normal file
48
server/Websocket/Stack.cs
Normal file
|
@ -0,0 +1,48 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Net.Sockets;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading;
|
||||||
|
|
||||||
|
namespace CircleScape.Websocket {
|
||||||
|
class Stack {
|
||||||
|
private List<Connection> Clients = new List<Connection>();
|
||||||
|
private Mutex ClientsMutex = new Mutex();
|
||||||
|
private bool RunWithNoClients = false;
|
||||||
|
|
||||||
|
public Stack(Connection initialConnection = null) {
|
||||||
|
if(initialConnection != null)
|
||||||
|
Clients.Add(initialConnection);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Stack(bool runWithNoClients, Connection initialConnection = null)
|
||||||
|
: this(initialConnection)
|
||||||
|
{
|
||||||
|
RunWithNoClients = runWithNoClients;
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool AddClient(Connection client) {
|
||||||
|
if(!ClientsMutex.WaitOne(5000))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
Clients.Add(client);
|
||||||
|
|
||||||
|
ClientsMutex.ReleaseMutex();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int ClientCount {
|
||||||
|
get {
|
||||||
|
return Clients.Count;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// USED FOR THREADING -- DO NOT CALL
|
||||||
|
public void ManageStack() {
|
||||||
|
int clientCount = ClientCount;
|
||||||
|
|
||||||
|
for(var i = 0; i < clientCount; ++i)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -5,5 +5,4 @@
|
||||||
<package id="System.Data.SQLite.Core" version="1.0.105.0" targetFramework="net452" />
|
<package id="System.Data.SQLite.Core" version="1.0.105.0" targetFramework="net452" />
|
||||||
<package id="System.Data.SQLite.EF6" version="1.0.105.0" targetFramework="net452" />
|
<package id="System.Data.SQLite.EF6" version="1.0.105.0" targetFramework="net452" />
|
||||||
<package id="System.Data.SQLite.Linq" version="1.0.105.0" targetFramework="net452" />
|
<package id="System.Data.SQLite.Linq" version="1.0.105.0" targetFramework="net452" />
|
||||||
<package id="WebSocketSharp" version="1.0.3-rc11" targetFramework="net452" />
|
|
||||||
</packages>
|
</packages>
|
|
@ -3,7 +3,7 @@ Microsoft Visual Studio Solution File, Format Version 12.00
|
||||||
# Visual Studio 14
|
# Visual Studio 14
|
||||||
VisualStudioVersion = 14.0.25420.1
|
VisualStudioVersion = 14.0.25420.1
|
||||||
MinimumVisualStudioVersion = 10.0.40219.1
|
MinimumVisualStudioVersion = 10.0.40219.1
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "server", "server.csproj", "{438DBAC1-BA37-40BB-9CCE-0FE1F23C6DC5}"
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CircleScape", "CircleScape.csproj", "{438DBAC1-BA37-40BB-9CCE-0FE1F23C6DC5}"
|
||||||
EndProject
|
EndProject
|
||||||
Global
|
Global
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
|
|
Loading…
Reference in a new issue