コード例 #1
0
            /// <summary>
            /// Verifies initial connection and notifies the client. Automatically called on successful connection.
            /// </summary>
            /// <param name="stateAsArObject"></param>
            private static void ConnectedCallback(IAsyncResult stateAsArObject)
            {
                SocketState ss = (SocketState)stateAsArObject.AsyncState;

                try
                {
                    ss.theSocket.EndConnect(stateAsArObject);
                    ss.ClientCallback(ss);
                    GetData(ss);
                }
                catch (Exception e)
                {
                    ss.theSocket.Close();
                    Console.WriteLine(e.ToString());
                    ss.ClientCallback(ss);
                }
            }
コード例 #2
0
            /// <summary>
            /// OS calls this function upon client contact with the server. Calls the server's callback function then begins the client loop again.
            /// </summary>
            /// <param name="ar"></param>
            private static void AcceptNewClient(IAsyncResult ar)
            {
                Console.WriteLine("A new player has joined the server.");

                ServerListenerState sls = (ServerListenerState)ar.AsyncState;

                TcpListener tcpListener = sls.ServerListener;

                Socket socket = tcpListener.EndAcceptSocket(ar);

                socket.NoDelay = true;

                SocketState ss = new SocketState(socket, 0);

                ss.ClientCallback = sls.ServerCallback;
                ss.theSocket      = socket;
                ss.ClientCallback(ss);

                sls.ServerListener.BeginAcceptSocket(AcceptNewClient, sls);
            }
コード例 #3
0
            /// <summary>
            /// Automatically called when data is received. Makes sure there is data, and notifies the client/server that data has arrived.
            /// </summary>
            /// <param name="stateAsArObject"></param>
            private static void ReceiveCallback(IAsyncResult stateAsArObject)
            {
                try
                {
                    SocketState ss = (SocketState)stateAsArObject.AsyncState;

                    int bytesRead = ss.theSocket.EndReceive(stateAsArObject);

                    // 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.ClientCallback(ss);
                    }
                }
                catch (Exception e)
                {
                    Console.WriteLine("EXCEPTION: " + e.Message);
                }
            }