Fixed not checking for sync on socket.

This commit is contained in:
hondacrx
2017-10-29 10:02:32 -04:00
parent 19d27aa6f1
commit c0431f8a17
2 changed files with 11 additions and 11 deletions
+10 -9
View File
@@ -61,11 +61,12 @@ namespace Framework.Networking
socketEventargs.SetBuffer(_receiveBuffer, 0, _receiveBuffer.Length); socketEventargs.SetBuffer(_receiveBuffer, 0, _receiveBuffer.Length);
socketEventargs.Completed += ReadHandlerInternal; socketEventargs.Completed += (sender, args) => ReadHandlerInternal(args);
socketEventargs.UserToken = _socket;
socketEventargs.SocketFlags = SocketFlags.None; socketEventargs.SocketFlags = SocketFlags.None;
socketEventargs.RemoteEndPoint = _socket.RemoteEndPoint;
_socket.ReceiveAsync(socketEventargs); if (!_socket.ReceiveAsync(socketEventargs))
ReadHandlerInternal(socketEventargs);
} }
catch (Exception ex) catch (Exception ex)
{ {
@@ -73,7 +74,7 @@ namespace Framework.Networking
} }
} }
public delegate void SocketReadCallback(object sender, SocketAsyncEventArgs args); public delegate void SocketReadCallback(SocketAsyncEventArgs args);
public void AsyncReadWithCallback(SocketReadCallback callback) public void AsyncReadWithCallback(SocketReadCallback callback)
{ {
if (!IsOpen()) if (!IsOpen())
@@ -85,11 +86,11 @@ namespace Framework.Networking
socketEventargs.SetBuffer(_receiveBuffer, 0, _receiveBuffer.Length); socketEventargs.SetBuffer(_receiveBuffer, 0, _receiveBuffer.Length);
socketEventargs.Completed += new EventHandler<SocketAsyncEventArgs>(callback); socketEventargs.Completed += (sender, args) => callback(args);
socketEventargs.UserToken = _socket; socketEventargs.UserToken = _socket;
socketEventargs.SocketFlags = SocketFlags.None; socketEventargs.SocketFlags = SocketFlags.None;
if (!_socket.ReceiveAsync(socketEventargs))
_socket.ReceiveAsync(socketEventargs); callback(socketEventargs);
} }
catch (Exception ex) catch (Exception ex)
{ {
@@ -97,9 +98,8 @@ namespace Framework.Networking
} }
} }
void ReadHandlerInternal(object sender, SocketAsyncEventArgs args) void ReadHandlerInternal(SocketAsyncEventArgs args)
{ {
args.Completed -= ReadHandlerInternal;
if (args.SocketError != SocketError.Success) if (args.SocketError != SocketError.Success)
{ {
CloseSocket(); CloseSocket();
@@ -126,6 +126,7 @@ namespace Framework.Networking
socketEventargs.SetBuffer(data, 0, data.Length); socketEventargs.SetBuffer(data, 0, data.Length);
socketEventargs.Completed += WriteHandlerInternal; socketEventargs.Completed += WriteHandlerInternal;
socketEventargs.RemoteEndPoint = _socket.RemoteEndPoint; socketEventargs.RemoteEndPoint = _socket.RemoteEndPoint;
socketEventargs.UserToken = _socket;
socketEventargs.SocketFlags = SocketFlags.None; socketEventargs.SocketFlags = SocketFlags.None;
_socket.SendAsync(socketEventargs); _socket.SendAsync(socketEventargs);
+1 -2
View File
@@ -84,9 +84,8 @@ namespace Game.Network
AsyncReadWithCallback(InitializeHandler); AsyncReadWithCallback(InitializeHandler);
} }
public void InitializeHandler(object sender, SocketAsyncEventArgs args) public void InitializeHandler(SocketAsyncEventArgs args)
{ {
args.Completed -= InitializeHandler;
if (args.SocketError != SocketError.Success) if (args.SocketError != SocketError.Success)
{ {
CloseSocket(); CloseSocket();