Skip to content

Commit da9bc3d

Browse files
committed
fix(transport): Fixed enet polling
1 parent f02cc92 commit da9bc3d

File tree

1 file changed

+82
-84
lines changed

1 file changed

+82
-84
lines changed

MLAPI.EnetTransport/EnetTransport.cs

Lines changed: 82 additions & 84 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
using System.Collections.Generic;
44
using ENet;
55
using MLAPI.Transports;
6+
using Event = ENet.Event;
7+
using EventType = ENet.EventType;
68

79
namespace MLAPI.EnetTransport
810
{
@@ -47,7 +49,7 @@ public override void Send(ulong clientId, ArraySegment<byte> data, string channe
4749
packet.Create(data.Array, data.Offset, data.Count, internalChannels[channelNameToId[channelName]].Flags);
4850

4951
GetEnetConnectionDetails(clientId, out uint peerId);
50-
52+
5153
connectedEnetPeers[peerId].Send(channelNameToId[channelName], ref packet);
5254
}
5355

@@ -60,109 +62,108 @@ public override NetEventType PollEvent(out ulong clientId, out string channelNam
6062
{
6163
Event @event;
6264

63-
if (host.CheckEvents(out @event) <= 0 && host.Service(0, out @event) > 0)
65+
if (host.CheckEvents(out @event) <= 0)
6466
{
65-
clientId = GetMLAPIClientId(@event.Peer.ID, false);
66-
67-
switch (@event.Type)
67+
if (host.Service(0, out @event) <= 0)
6868
{
69-
case EventType.None:
70-
{
71-
channelName = null;
72-
payload = new ArraySegment<byte>();
73-
74-
return NetEventType.Nothing;
75-
}
76-
case EventType.Connect:
77-
{
78-
channelName = null;
79-
payload = new ArraySegment<byte>();
80-
81-
connectedEnetPeers.Add(@event.Peer.ID, @event.Peer);
82-
83-
return NetEventType.Connect;
84-
}
85-
case EventType.Disconnect:
86-
{
87-
channelName = null;
88-
payload = new ArraySegment<byte>();
69+
clientId = 0;
70+
channelName = null;
71+
payload = new ArraySegment<byte>();
8972

90-
connectedEnetPeers.Remove(@event.Peer.ID);
91-
92-
return NetEventType.Disconnect;
93-
}
94-
case EventType.Receive:
73+
return NetEventType.Nothing;
74+
}
75+
}
76+
77+
clientId = GetMLAPIClientId(@event.Peer.ID, false);
78+
79+
switch (@event.Type)
80+
{
81+
case EventType.None:
82+
{
83+
channelName = null;
84+
payload = new ArraySegment<byte>();
85+
86+
return NetEventType.Nothing;
87+
}
88+
case EventType.Connect:
89+
{
90+
channelName = null;
91+
payload = new ArraySegment<byte>();
92+
93+
connectedEnetPeers.Add(@event.Peer.ID, @event.Peer);
94+
95+
return NetEventType.Connect;
96+
}
97+
case EventType.Disconnect:
98+
{
99+
channelName = null;
100+
payload = new ArraySegment<byte>();
101+
102+
connectedEnetPeers.Remove(@event.Peer.ID);
103+
104+
return NetEventType.Disconnect;
105+
}
106+
case EventType.Receive:
107+
{
108+
channelName = channelIdToName[@event.ChannelID];
109+
int size = @event.Packet.Length;
110+
111+
if (size > messageBuffer.Length)
95112
{
96-
channelName = channelIdToName[@event.ChannelID];
97-
int size = @event.Packet.Length;
98-
99-
if (size > messageBuffer.Length)
113+
byte[] tempBuffer;
114+
115+
if (temporaryBufferReference != null && temporaryBufferReference.IsAlive && ((byte[]) temporaryBufferReference.Target).Length >= size)
100116
{
101-
byte[] tempBuffer;
102-
103-
if (temporaryBufferReference != null && temporaryBufferReference.IsAlive && ((byte[]) temporaryBufferReference.Target).Length >= size)
104-
{
105-
tempBuffer = (byte[])temporaryBufferReference.Target;
106-
}
107-
else
108-
{
109-
tempBuffer = new byte[size];
110-
temporaryBufferReference = new WeakReference(tempBuffer);
111-
}
112-
113-
@event.Packet.CopyTo(tempBuffer);
114-
payload = new ArraySegment<byte>(tempBuffer, 0, size);
117+
tempBuffer = (byte[]) temporaryBufferReference.Target;
115118
}
116119
else
117120
{
118-
@event.Packet.CopyTo(messageBuffer);
119-
payload = new ArraySegment<byte>(messageBuffer, 0, size);
121+
tempBuffer = new byte[size];
122+
temporaryBufferReference = new WeakReference(tempBuffer);
120123
}
121-
122-
123-
@event.Packet.Dispose();
124-
125-
return NetEventType.Data;
126-
}
127-
case EventType.Timeout:
128-
{
129-
channelName = null;
130-
payload = new ArraySegment<byte>();
131-
132-
connectedEnetPeers.Remove(@event.Peer.ID);
133-
134-
return NetEventType.Disconnect;
124+
125+
@event.Packet.CopyTo(tempBuffer);
126+
payload = new ArraySegment<byte>(tempBuffer, 0, size);
135127
}
136-
default:
128+
else
137129
{
138-
channelName = null;
139-
payload = new ArraySegment<byte>();
140-
141-
return NetEventType.Nothing;
130+
@event.Packet.CopyTo(messageBuffer);
131+
payload = new ArraySegment<byte>(messageBuffer, 0, size);
142132
}
133+
134+
@event.Packet.Dispose();
135+
136+
return NetEventType.Data;
137+
}
138+
case EventType.Timeout:
139+
{
140+
channelName = null;
141+
payload = new ArraySegment<byte>();
142+
143+
connectedEnetPeers.Remove(@event.Peer.ID);
144+
145+
return NetEventType.Disconnect;
146+
}
147+
default:
148+
{
149+
channelName = null;
150+
payload = new ArraySegment<byte>();
151+
152+
return NetEventType.Nothing;
143153
}
144-
}
145-
else
146-
{
147-
channelName = null;
148-
payload = new ArraySegment<byte>();
149-
clientId = 0;
150-
151-
return NetEventType.Nothing;
152154
}
153155
}
154156

155157
public override void StartClient()
156158
{
157159
host = new Host();
158160

159-
Address address = new Address();
161+
host.Create(1, MLAPI_CHANNELS.Length + Channels.Count);
160162

163+
Address address = new Address();
161164
address.Port = Port;
162165
address.SetHost(Address);
163166

164-
host.Create(address, 1);
165-
166167
Peer serverPeer = host.Connect(address, MLAPI_CHANNELS.Length + Channels.Count);
167168

168169
serverPeerId = serverPeer.ID;
@@ -171,14 +172,11 @@ public override void StartClient()
171172
public override void StartServer()
172173
{
173174
host = new Host();
174-
175-
host.SetChannelLimit(MLAPI_CHANNELS.Length + Channels.Count);
176175

177176
Address address = new Address();
178-
179177
address.Port = Port;
180178

181-
host.Create(address, MaxClients);
179+
host.Create(address, MaxClients, MLAPI_CHANNELS.Length + Channels.Count);
182180
}
183181

184182
public override void DisconnectRemoteClient(ulong clientId)

0 commit comments

Comments
 (0)