-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathTcpServerSecureTransportAdapter.cs
More file actions
32 lines (31 loc) · 1.15 KB
/
TcpServerSecureTransportAdapter.cs
File metadata and controls
32 lines (31 loc) · 1.15 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
using System.Net;
using System.Net.Sockets;
namespace M9Studio.ShadowTalk.Core
{
public class TcpServerSecureTransportAdapter : TcpSecureTransportAdapter
{
private Dictionary<IPEndPoint, Socket> sockets = new();
public TcpServerSecureTransportAdapter(Socket socket) : base(socket) => Task.Run(WaitNewConnections);
private async Task WaitNewConnections()
{
while (true)
{
Socket newSocket = await _socket.AcceptAsync();
IPEndPoint iPEndPoint = (IPEndPoint)newSocket.RemoteEndPoint;
sockets.Add(iPEndPoint, newSocket);
RaiseConnected(iPEndPoint);
}
}
public void Disconect(IPEndPoint address)
{
if (sockets.ContainsKey(address))
{
sockets[address].Close();
sockets.Remove(address);
RaiseDisconect(address);
}
}
public override byte[] ReceiveFrom(IPEndPoint address) => ReceiveFrom(sockets[address]);
public override bool SendTo(byte[] buffer, IPEndPoint address) => SendTo(buffer, sockets[address]);
}
}