Skip to content

Commit

Permalink
Some graceful handling for client disconnects. Fixes statianzo#2
Browse files Browse the repository at this point in the history
  • Loading branch information
statianzo committed Feb 11, 2011
1 parent 774fedc commit 5f82140
Show file tree
Hide file tree
Showing 3 changed files with 61 additions and 28 deletions.
62 changes: 40 additions & 22 deletions src/Fleck/Receiver.cs
Original file line number Diff line number Diff line change
Expand Up @@ -33,32 +33,50 @@ public void Receive(DataFrame frame = null)
return;
}

Socket.BeginReceive(buffer, 0, buffer.Length, SocketFlags.None,
r =>
{
int size = Socket.EndReceive(r);
var dataframe = frame;
if (size <= 0)
try
{
Socket.BeginReceive(buffer, 0, buffer.Length, SocketFlags.None,
r =>
{
_connection.Close();
return;
}
try
{
int size = Socket.EndReceive(r);
var dataframe = frame;
for (int i = 0; i < size; i++)
_queue.Enqueue(buffer[i]);
if (size <= 0)
{
_connection.Close();
return;
}
while (_queue.Count > 0)
{
dataframe.Append(_queue.Dequeue());
if (!dataframe.IsComplete) continue;
for (int i = 0; i < size; i++)
_queue.Enqueue(buffer[i]);
while (_queue.Count > 0)
{
dataframe.Append(_queue.Dequeue());
if (!dataframe.IsComplete) continue;
var data = dataframe.ToString();
_connection.OnMessage(data);
dataframe = new DataFrame();
}
Receive(dataframe);
var data = dataframe.ToString();
_connection.OnMessage(data);
dataframe = new DataFrame();
}
Receive(dataframe);
}, null);
}
catch (SocketException e)
{
Log.Error(e.Message);
_connection.Close();
}
}, null);
}
catch (SocketException e)
{
Log.Error(e.Message);
_connection.Close();
}
}
}
}
26 changes: 21 additions & 5 deletions src/Fleck/Sender.cs
Original file line number Diff line number Diff line change
Expand Up @@ -17,11 +17,27 @@ public void Send(string data)
{
if (!Socket.Connected) return;
var wrapped = DataFrame.Wrap(data);
Socket.BeginSend(wrapped, 0, wrapped.Length, SocketFlags.None, r =>
{
if (Socket.Connected)
Socket.EndSend(r);
}, null);
try
{
Socket.BeginSend(wrapped, 0, wrapped.Length, SocketFlags.None, r =>
{
try
{
if (Socket.Connected)
Socket.EndSend(r);
}
catch (SocketException e)
{
Log.Error(e.Message);
_connection.Close();
}
}, null);
}
catch (SocketException e)
{
Log.Error(e.Message);
_connection.Close();
}
}
}
}
1 change: 0 additions & 1 deletion src/Fleck/WebSocketConnection.cs
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,6 @@ public void StartReceiving()

public void Close()
{
if (!Socket.Connected) return;
OnClose();
Socket.Close();
}
Expand Down

0 comments on commit 5f82140

Please sign in to comment.