Ejemplo n.º 1
0
        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);
                }
            }
        }
Ejemplo n.º 2
0
        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);
                    }
                }
            }
        }