-
Notifications
You must be signed in to change notification settings - Fork 19
/
Copy pathTcpReciever.cs
77 lines (67 loc) · 2.5 KB
/
TcpReciever.cs
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
using System;
using System.Net;
using System.Net.Sockets;
using System.Threading;
using UnityEngine;
namespace Assets.RemoteHandsTracking
{
public class TcpReciever
{
public event EventHandler<byte[]> DataReceived;
private TcpListener tcpListener;
private Thread tcpListenerThread;
private TcpClient connectedTcpClient;
private readonly int _listenOnPort;
private readonly string _listenOnIp;
private bool _stopListenerThread;
public TcpReciever(int listenOnPort, string listenOnIp)
{
_listenOnPort = listenOnPort;
_listenOnIp = listenOnIp;
}
public void StartListeningOnNewThread()
{
tcpListenerThread = new Thread(() =>
{
tcpListener = new TcpListener(IPAddress.Parse(_listenOnIp), _listenOnPort);
tcpListener.Start();
Debug.Log("Server is listening");
tcpListener.BeginAcceptTcpClient(StartReadingTcpConnectionData, new object());
});
tcpListenerThread.IsBackground = true;
tcpListenerThread.Start();
}
public void Stop()
{
tcpListener.Stop();
_stopListenerThread = true;
}
const int OneMbInBits = 1 * 8 * 1000 * 1000;
private void StartReadingTcpConnectionData(IAsyncResult result)
{
try
{
connectedTcpClient = tcpListener.EndAcceptTcpClient(result);
Debug.Log("TCP Connection Accepted");
tcpListener.BeginAcceptTcpClient(StartReadingTcpConnectionData, new object());
var packetProtocol = new PacketProtocol(OneMbInBits, (message) =>
{
if (message.Length > 0)
DataReceived?.Invoke(this, message);
});
var buffer = new Byte[connectedTcpClient.ReceiveBufferSize];
while (!_stopListenerThread)
{
var receivedDataByteCount = connectedTcpClient.Client.Receive(buffer);
var readBytes = new byte[receivedDataByteCount];
Array.Copy(buffer, readBytes, receivedDataByteCount);
packetProtocol.DataReceived(readBytes);
}
}
catch (SocketException socketException)
{
Debug.LogError("SocketException " + socketException.ToString());
}
}
}
}