Skip to content

Commit 6aef964

Browse files
committed
Added transport interface
1 parent 2cee9b0 commit 6aef964

File tree

5 files changed

+138
-0
lines changed

5 files changed

+138
-0
lines changed

MLAPI/Data/Transports/ChannelType.cs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
namespace MLAPI.Data
2+
{
3+
public enum ChannelType
4+
{
5+
Unreliable,
6+
UnreliableFragmented,
7+
UnreliableSequenced,
8+
Reliable,
9+
ReliableFragmented,
10+
ReliableSequenced,
11+
StateUpdate,
12+
ReliableStateUpdate,
13+
AllCostDelivery
14+
}
15+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
namespace MLAPI.Data
2+
{
3+
public interface IUDPTransport
4+
{
5+
void QueueMessageForSending(uint clientId, ref byte[] dataBuffer, int dataSize, int channelId, bool skipqueue, out byte error);
6+
void SendQueue(uint clientId, out byte error);
7+
NetEventType PollReceive(out uint clientId, out int channelId, ref byte[] data, int bufferSize, out int receivedSize, out byte error);
8+
int Connect(string address, int port, object settings, bool websocket, out byte error);
9+
int RegisterServerListenSocket(object settings, bool websocket);
10+
void Disconnect(uint clientId);
11+
int GetCurrentRTT(uint clientId, out byte error);
12+
int GetRemoteDelayTimeMS(uint clientId, int remoteTimestamp, out byte error);
13+
int GetNetworkTimestamp();
14+
void Shutdown();
15+
}
16+
}

MLAPI/Data/Transports/NetEventType.cs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
namespace MLAPI.Data
2+
{
3+
public enum NetEventType
4+
{
5+
Data,
6+
Connect,
7+
Disconnect,
8+
Nothing
9+
}
10+
}
Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
using UnityEngine.Networking;
2+
3+
namespace MLAPI.Data
4+
{
5+
public class UnetTransport : IUDPTransport
6+
{
7+
public int Connect(string address, int port, object settings, bool websocket, out byte error)
8+
{
9+
NetworkTransport.Init();
10+
int hostId = NetworkTransport.AddHost((HostTopology)settings);
11+
return NetworkTransport.Connect(hostId, address, port, 0, out error);
12+
}
13+
14+
public void Disconnect(uint clientId)
15+
{
16+
NetId netId = new NetId(clientId);
17+
byte error;
18+
NetworkTransport.Disconnect(netId.HostId, netId.ConnectionId, out error);
19+
}
20+
21+
public int GetCurrentRTT(uint clientId, out byte error)
22+
{
23+
NetId netId = new NetId(clientId);
24+
return NetworkTransport.GetCurrentRTT(netId.HostId, netId.ConnectionId, out error);
25+
}
26+
27+
public int GetNetworkTimestamp()
28+
{
29+
return NetworkTransport.GetNetworkTimestamp();
30+
}
31+
32+
public int GetRemoteDelayTimeMS(uint clientId, int remoteTimestamp, out byte error)
33+
{
34+
NetId netId = new NetId(clientId);
35+
return NetworkTransport.GetRemoteDelayTimeMS(netId.HostId, netId.ConnectionId, remoteTimestamp, out error);
36+
}
37+
38+
public NetEventType PollReceive(out uint clientId, out int channelId, ref byte[] data, int bufferSize, out int receivedSize, out byte error)
39+
{
40+
int hostId;
41+
int connectionId;
42+
byte err;
43+
NetworkEventType eventType = NetworkTransport.Receive(out hostId, out connectionId, out channelId, data, bufferSize, out receivedSize, out err);
44+
clientId = new NetId((byte)hostId, (ushort)connectionId, false, false).GetClientId();
45+
NetworkError errorType = (NetworkError)err;
46+
if (errorType == NetworkError.Timeout)
47+
eventType = NetworkEventType.DisconnectEvent; //In UNET. Timeouts are not disconnects. We have to translate that here.
48+
error = 0;
49+
50+
//Translate NetworkEventType to NetEventType
51+
switch (eventType)
52+
{
53+
case NetworkEventType.DataEvent:
54+
return NetEventType.Data;
55+
case NetworkEventType.ConnectEvent:
56+
return NetEventType.Connect;
57+
case NetworkEventType.DisconnectEvent:
58+
return NetEventType.Disconnect;
59+
case NetworkEventType.Nothing:
60+
return NetEventType.Nothing;
61+
case NetworkEventType.BroadcastEvent:
62+
return NetEventType.Nothing;
63+
}
64+
return NetEventType.Nothing;
65+
}
66+
67+
public int RegisterServerListenSocket(object settings, bool websockets)
68+
{
69+
NetworkTransport.Init();
70+
return NetworkTransport.AddHost((HostTopology)settings);
71+
}
72+
73+
public void QueueMessageForSending(uint clientId, ref byte[] dataBuffer, int dataSize, int channelId, bool skipqueue, out byte error)
74+
{
75+
NetId netId = new NetId(clientId);
76+
if (skipqueue)
77+
NetworkTransport.Send(netId.HostId, netId.ConnectionId, channelId, dataBuffer, dataSize, out error);
78+
else
79+
NetworkTransport.QueueMessageForSending(netId.HostId, netId.ConnectionId, channelId, dataBuffer, dataSize, out error);
80+
}
81+
82+
public void Shutdown()
83+
{
84+
NetworkTransport.Shutdown();
85+
}
86+
87+
public void SendQueue(uint clientId, out byte error)
88+
{
89+
NetId netId = new NetId(clientId);
90+
NetworkTransport.SendQueuedMessages(netId.HostId, netId.ConnectionId, out error);
91+
}
92+
}
93+
}

MLAPI/MLAPI.csproj

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,15 +72,19 @@
7272
<Compile Include="Attributes\TargetRpc.cs" />
7373
<Compile Include="Data\Cache.cs" />
7474
<Compile Include="Data\Channel.cs" />
75+
<Compile Include="Data\Transports\ChannelType.cs" />
7576
<Compile Include="Data\FieldType.cs" />
7677
<Compile Include="Attributes\SyncedVar.cs" />
7778
<Compile Include="Data\FixedQueue.cs" />
79+
<Compile Include="Data\Transports\IUDPTransport.cs" />
80+
<Compile Include="Data\Transports\NetEventType.cs" />
7881
<Compile Include="Data\NetworkConfig.cs" />
7982
<Compile Include="Data\NetworkedPrefab.cs" />
8083
<Compile Include="Data\NetworkPool.cs" />
8184
<Compile Include="Data\SyncedVarField.cs" />
8285
<Compile Include="Data\TrackedPointData.cs" />
8386
<Compile Include="Data\TransportHost.cs" />
87+
<Compile Include="Data\Transports\UnetTransport.cs" />
8488
<Compile Include="GlobalSuppressions.cs" />
8589
<Compile Include="MonoBehaviours\Prototyping\NetworkedAnimator.cs" />
8690
<Compile Include="MonoBehaviours\Prototyping\NetworkedNavMeshAgent.cs" />

0 commit comments

Comments
 (0)