/// <summary>
        /// Called when [data received].
        /// </summary>
        /// <param name="asyn">The asyn.</param>
        private void OnDataReceived(IAsyncResult asyn)
        {
            // Receive stateobject of the client that sent data
            LogClient dataSender = (LogClient)asyn.AsyncState;

            try
            {
                // Complete aysnc receive method and read data length
                int bytesRead = dataSender.ClientSocket.EndReceive(asyn);

                if (bytesRead > 0)
                {
                    // More data could be sent so append data received so far
                    dataSender.StrBuilder.Append(Encoding.UTF8.GetString(dataSender.buffer, 0, bytesRead));
                    if (dataSender.StrBuilder.Length != 0 &&
                        MessageReceived != null
                        )
                    {
                        // TODO: is it possible that multiple messages are in the sb?
                        // Consider whether it's necessary to replace with newline.
                        dataSender.StrBuilder.Replace("\0", null); // Removes them.

                        // Dispatch Event
                        SocketMessageReceivedArgs args = new SocketMessageReceivedArgs();
                        args.Message  = dataSender.StrBuilder.ToString();
                        args.ClientId = dataSender.ClientId;

                        MessageReceived(this, args);

                        dataSender.StrBuilder.Clear();
                    }
                    try
                    {
                        dataSender.ClientSocket.BeginReceive(dataSender.buffer, 0, LogClient.BufferSize, 0, new AsyncCallback(this.OnDataReceived), dataSender);
                    }
                    catch (SocketException) { }
                }
                else
                {
                    //closeSocket(dataSender.UniqueAddress);
                }
            }
            catch (SocketException)
            {
                // TODO: should we closeSocketSilent()? Or?
            }
            catch (ObjectDisposedException)
            {
                // TODO: should we closeSocketSilent()? Or?
            }
        }
Ejemplo n.º 2
0
 /// <summary>
 /// Server_s the message received.
 /// </summary>
 /// <param name="socketServer">The socket server.</param>
 /// <param name="e">The e.</param>
 void Server_MessageReceived(ILoggerServer socketServer, SocketMessageReceivedArgs e)
 {
     ConnectedClients[e.ClientAddress](e.ClientAddress, e.Message);
 }
        /// <summary>
        /// Called when [data received].
        /// </summary>
        /// <param name="asyn">The asyn.</param>
        private void OnDataReceived(IAsyncResult asyn)
        {
            // Receive stateobject of the client that sent data
                LogClient dataSender = (LogClient)asyn.AsyncState;

                try
                {
                    // Complete aysnc receive method and read data length
                    int bytesRead = dataSender.ClientSocket.EndReceive(asyn);

                    if (bytesRead > 0)
                    {
                        // More data could be sent so append data received so far
                        dataSender.StrBuilder.Append(Encoding.UTF8.GetString(dataSender.buffer, 0, bytesRead));
                        if (dataSender.StrBuilder.Length != 0
                            && MessageReceived != null
                            )
                        {
                            // TODO: is it possible that multiple messages are in the sb?
                            // Consider whether it's necessary to replace with newline.
                            dataSender.StrBuilder.Replace("\0", null); // Removes them.

                            // Dispatch Event
                            SocketMessageReceivedArgs args = new SocketMessageReceivedArgs();
                            args.Message = dataSender.StrBuilder.ToString();
                            args.ClientId = dataSender.ClientId;
                            args.ClientAddress = dataSender.UniqueAddress;
                            MessageReceived(this, args);

                            dataSender.StrBuilder.Clear();
                        }
                        try
                        {
                            dataSender.ClientSocket.BeginReceive(dataSender.buffer, 0, LogClient.BufferSize, 0, new AsyncCallback(this.OnDataReceived), dataSender);
                        }
                        catch (SocketException) { }
                    }
                    else
                    {
                        closeSocket(dataSender.UniqueAddress);
                    }
                }
                catch (SocketException)
                {
                    // TODO: should we closeSocketSilent()? Or?
                }
                catch (ObjectDisposedException)
                {
                    // TODO: should we closeSocketSilent()? Or?
                }
        }
Ejemplo n.º 4
0
 /// <summary>
 /// Server_s the message received.
 /// </summary>
 /// <param name="socketServer">The socket server.</param>
 /// <param name="e">The e.</param>
 void Server_MessageReceived(ILoggerServer socketServer, SocketMessageReceivedArgs e)
 {
     ConnectedClients[e.ClientAddress](e.ClientAddress, e.Message);
 }