public void ProcessSocketArgs(SocketAsyncEventArgs socketArgs, EventHandler <SocketAsyncEventArgs> completedHandler, Socket socket) { try { if (socketArgs.BytesTransferred == 0) { return; } var messageHeader = socketArgs.Buffer[0] * 100000000 + socketArgs.Buffer[1] * 1000000 + socketArgs.Buffer[2] * 10000 + socketArgs.Buffer[3] * 100 + socketArgs.Buffer[4]; if (AggregateMessages.Count == 0 && socketArgs.BytesTransferred - 5 == messageHeader) { ProcessMessage(socketArgs.Buffer.Skip(5).Take(socketArgs.BytesTransferred - 5).ToArray()); return; } else { if (ExpectedBinarySize == 0) { ExpectedBinarySize = messageHeader; } AggregateMessages.AddRange(socketArgs.Buffer.Take(socketArgs.BytesTransferred)); while (AggregateMessages.Count - 5 >= ExpectedBinarySize) { ProcessMessage(AggregateMessages.Skip(5).Take(ExpectedBinarySize).ToArray()); AggregateMessages.RemoveRange(0, ExpectedBinarySize + 5); if (AggregateMessages.Count > 0) { ExpectedBinarySize = AggregateMessages[0] * 100000000 + AggregateMessages[1] * 1000000 + AggregateMessages[2] * 10000 + AggregateMessages[3] * 100 + AggregateMessages[4]; } else { ExpectedBinarySize = 0; } } } } catch (Exception ex) { Utilities.WriteToLog(ex); } finally { if (!socket.ReceiveAsync(socketArgs)) { completedHandler(socket, socketArgs); } } }
public void ProcessSocketArgs(SocketAsyncEventArgs socketArgs, EventHandler <SocketAsyncEventArgs> completedHandler, Socket socket) { try { if (socketArgs.BytesTransferred == 0) { if (Config.Current.StartupMode == Config.StartupModes.Notifier) { Environment.Exit(0); } return; } LastMessage = DateTime.Now; var messageHeader = socketArgs.Buffer[0] * 100000000 + socketArgs.Buffer[1] * 1000000 + socketArgs.Buffer[2] * 10000 + socketArgs.Buffer[3] * 100 + socketArgs.Buffer[4]; if (AggregateMessages.Count == 0 && socketArgs.BytesTransferred - 5 == messageHeader) { ProcessMessage(socketArgs.Buffer.Skip(5).Take(socketArgs.BytesTransferred - 5).ToArray()); return; } else { if (ExpectedBinarySize == 0) { ExpectedBinarySize = messageHeader; } AggregateMessages.AddRange(socketArgs.Buffer.Take(socketArgs.BytesTransferred)); while (AggregateMessages.Count - 5 >= ExpectedBinarySize) { ProcessMessage(AggregateMessages.Skip(5).Take(ExpectedBinarySize).ToArray()); AggregateMessages.RemoveRange(0, ExpectedBinarySize + 5); if (AggregateMessages.Count > 0) { ExpectedBinarySize = AggregateMessages[0] * 100000000 + AggregateMessages[1] * 1000000 + AggregateMessages[2] * 10000 + AggregateMessages[3] * 100 + AggregateMessages[4]; } else { ExpectedBinarySize = 0; AggregateMessages.Clear(); } } } } catch (Exception ex) { Utilities.WriteToLog(ex); AggregateMessages.Clear(); ExpectedBinarySize = 0; } finally { if (socket != null && socket.Connected) { if (!socket.ReceiveAsync(socketArgs)) { completedHandler(socket, socketArgs); } } } }