Ejemplo n.º 1
0
            /// <summary>
            /// This function is "called" by the operating system when data arrives on the socket
            /// </summary>
            /// <param name="ar"></param>
            private static void ReceiveCallback(IAsyncResult ar)
            {
                SocketState ss = (SocketState)ar.AsyncState;

                ss.Connected = true;
                int bytesRead = 0;

                try
                {
                    bytesRead = ss.theSocket.EndReceive(ar);
                    // If the socket is still open
                    if (bytesRead > 0)
                    {
                        string theMessage = Encoding.UTF8.GetString(ss.messageBuffer, 0, bytesRead);
                        // Append the received data to the growable buffer.
                        // It may be an incomplete message, so we need to start building it up piece by piece
                        ss.sb.Append(theMessage);
                        ss._call(ss);
                    }
                    else
                    {
                        DisconnectError(ss, "Stopped getting data from server");
                        ss.theSocket.Close();
                    }
                }
                catch (Exception e)
                {
                    // set the connection to false to
                    ss.Connected = false;

                    // trigger a disconnect event that passes in a socket state. Calling it here because this seems to be where
                    // exceptions are thrown after a disconnect.
                    DisconnectError(ss, e.Message);
                }
            }
Ejemplo n.º 2
0
            /// <summary>
            /// The function that continues the event loop for each new client connection
            /// </summary>
            /// <param name="ar"></param>
            public static void AcceptNewClient(IAsyncResult ar)
            {
                ListenerState ls     = (ListenerState)ar.AsyncState;
                Socket        socket = ls.listener.EndAcceptSocket(ar);
                SocketState   ss     = new SocketState(socket, ls._call, ls.ID);

                ss._call(ss);
                ls.ID++;
                ls.listener.BeginAcceptSocket(AcceptNewClient, ls);
            }
Ejemplo n.º 3
0
            /// <summary>
            /// This function is "called" by the operating system when the remote site acknowledges the connect request
            /// </summary>
            /// <param name="ar"></param>
            private static void ConnectedCallback(IAsyncResult ar)
            {
                SocketState ss = (SocketState)ar.AsyncState;

                // Complete the connection.
                try
                {
                    ss.theSocket.EndConnect(ar);
                    ss._call(ss);
                }
                catch (Exception e)
                {
                    System.Diagnostics.Debug.WriteLine(e.Message);
                }
            }