Rename connection packet handling.
This commit is contained in:
@@ -37,9 +37,9 @@ namespace OpenRA.Server
|
|||||||
|
|
||||||
readonly BlockingCollection<byte[]> sendQueue = new BlockingCollection<byte[]>();
|
readonly BlockingCollection<byte[]> sendQueue = new BlockingCollection<byte[]>();
|
||||||
|
|
||||||
public Connection(Socket socket, int playerIndex, string authToken, Action<Connection, int, byte[]> onPacket, Action<Connection> onDisconnect)
|
public Connection(Server server, Socket socket, string authToken)
|
||||||
{
|
{
|
||||||
PlayerIndex = playerIndex;
|
PlayerIndex = server.ChooseFreePlayerIndex();
|
||||||
AuthToken = authToken;
|
AuthToken = authToken;
|
||||||
EndPoint = socket.RemoteEndPoint;
|
EndPoint = socket.RemoteEndPoint;
|
||||||
|
|
||||||
@@ -47,12 +47,12 @@ namespace OpenRA.Server
|
|||||||
{
|
{
|
||||||
Name = $"Client communication ({EndPoint}",
|
Name = $"Client communication ({EndPoint}",
|
||||||
IsBackground = true
|
IsBackground = true
|
||||||
}.Start((socket, onPacket, onDisconnect));
|
}.Start((server, socket));
|
||||||
}
|
}
|
||||||
|
|
||||||
void SendReceiveLoop(object s)
|
void SendReceiveLoop(object s)
|
||||||
{
|
{
|
||||||
var (socket, onPacket, onDisconnect) = (ValueTuple<Socket, Action<Connection, int, byte[]>, Action<Connection>>)s;
|
var (server, socket) = (ValueTuple<Server, Socket>)s;
|
||||||
socket.Blocking = false;
|
socket.Blocking = false;
|
||||||
socket.NoDelay = true;
|
socket.NoDelay = true;
|
||||||
|
|
||||||
@@ -107,7 +107,7 @@ namespace OpenRA.Server
|
|||||||
|
|
||||||
case ReceiveState.Data:
|
case ReceiveState.Data:
|
||||||
{
|
{
|
||||||
onPacket(this, frame, bytes);
|
server.OnConnectionPacket(this, frame, bytes);
|
||||||
expectLength = 8;
|
expectLength = 8;
|
||||||
state = ReceiveState.Header;
|
state = ReceiveState.Header;
|
||||||
|
|
||||||
@@ -152,7 +152,7 @@ namespace OpenRA.Server
|
|||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
{
|
{
|
||||||
onDisconnect(this);
|
server.OnConnectionDisconnect(this);
|
||||||
socket.Dispose();
|
socket.Dispose();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -198,7 +198,7 @@ namespace OpenRA.Server
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
events.Add(new ClientConnectEvent(listener.AcceptSocket()));
|
events.Add(new ConnectionConnectEvent(listener.AcceptSocket()));
|
||||||
}
|
}
|
||||||
catch (Exception)
|
catch (Exception)
|
||||||
{
|
{
|
||||||
@@ -316,14 +316,14 @@ namespace OpenRA.Server
|
|||||||
return nextPlayerIndex++;
|
return nextPlayerIndex++;
|
||||||
}
|
}
|
||||||
|
|
||||||
void OnClientPacket(Connection conn, int frame, byte[] data)
|
internal void OnConnectionPacket(Connection conn, int frame, byte[] data)
|
||||||
{
|
{
|
||||||
events.Add(new ClientPacketEvent(conn, frame, data));
|
events.Add(new ConnectionPacketEvent(conn, frame, data));
|
||||||
}
|
}
|
||||||
|
|
||||||
void OnClientDisconnect(Connection conn)
|
internal void OnConnectionDisconnect(Connection conn)
|
||||||
{
|
{
|
||||||
events.Add(new ClientDisconnectEvent(conn));
|
events.Add(new ConnectionDisconnectEvent(conn));
|
||||||
}
|
}
|
||||||
|
|
||||||
void AcceptConnection(Socket socket)
|
void AcceptConnection(Socket socket)
|
||||||
@@ -335,7 +335,7 @@ namespace OpenRA.Server
|
|||||||
// which we can then verify against the player public key database
|
// which we can then verify against the player public key database
|
||||||
var token = Convert.ToBase64String(OpenRA.Exts.MakeArray(256, _ => (byte)Random.Next()));
|
var token = Convert.ToBase64String(OpenRA.Exts.MakeArray(256, _ => (byte)Random.Next()));
|
||||||
|
|
||||||
var newConn = new Connection(socket, ChooseFreePlayerIndex(), token, OnClientPacket, OnClientDisconnect);
|
var newConn = new Connection(this, socket, token);
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
// Send handshake and client index.
|
// Send handshake and client index.
|
||||||
@@ -1315,10 +1315,10 @@ namespace OpenRA.Server
|
|||||||
|
|
||||||
interface IServerEvent { void Invoke(Server server); }
|
interface IServerEvent { void Invoke(Server server); }
|
||||||
|
|
||||||
class ClientConnectEvent : IServerEvent
|
class ConnectionConnectEvent : IServerEvent
|
||||||
{
|
{
|
||||||
readonly Socket socket;
|
readonly Socket socket;
|
||||||
public ClientConnectEvent(Socket socket)
|
public ConnectionConnectEvent(Socket socket)
|
||||||
{
|
{
|
||||||
this.socket = socket;
|
this.socket = socket;
|
||||||
}
|
}
|
||||||
@@ -1329,10 +1329,10 @@ namespace OpenRA.Server
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class ClientDisconnectEvent : IServerEvent
|
class ConnectionDisconnectEvent : IServerEvent
|
||||||
{
|
{
|
||||||
readonly Connection connection;
|
readonly Connection connection;
|
||||||
public ClientDisconnectEvent(Connection connection)
|
public ConnectionDisconnectEvent(Connection connection)
|
||||||
{
|
{
|
||||||
this.connection = connection;
|
this.connection = connection;
|
||||||
}
|
}
|
||||||
@@ -1343,13 +1343,13 @@ namespace OpenRA.Server
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class ClientPacketEvent : IServerEvent
|
class ConnectionPacketEvent : IServerEvent
|
||||||
{
|
{
|
||||||
readonly Connection connection;
|
readonly Connection connection;
|
||||||
readonly int frame;
|
readonly int frame;
|
||||||
readonly byte[] data;
|
readonly byte[] data;
|
||||||
|
|
||||||
public ClientPacketEvent(Connection connection, int frame, byte[] data)
|
public ConnectionPacketEvent(Connection connection, int frame, byte[] data)
|
||||||
{
|
{
|
||||||
this.connection = connection;
|
this.connection = connection;
|
||||||
this.frame = frame;
|
this.frame = frame;
|
||||||
|
|||||||
Reference in New Issue
Block a user