Пример #1
0
    public static void ReadCallback(IAsyncResult ar)
    {
        String content = String.Empty;

        // Retrieve the state object and the handler socket
        // from the asynchronous state object.
        StateObject state   = (StateObject)ar.AsyncState;
        Socket      handler = state.workSocket;

        // Read data from the client socket.
        int bytesRead = handler.EndReceive(ar);

        if (bytesRead > 0)
        {
            // There  might be more data, so store the data received so far.
            state.sb.Append(Encoding.ASCII.GetString(
                                state.buffer, 0, bytesRead));

            // Check for end-of-file tag. If it is not there, read
            // more data.
            content = state.sb.ToString();
            if (content.IndexOf("?") > -1)
            {
                // All the data has been read from the
                // client. Display it on the console.
                content = content.Substring(0, content.Length - 1);

                // Echo the data back to the client.
                Expression expression = JSONHelper.From <AsyncSocketServer.Expression>(content);

                Console.WriteLine("Calculating : {0} ... ", expression.argument1 + expression.oper + expression.argument2);
                String result = null;
                try{
                    double val = expression.eval();
                    result = val.ToString();
                }catch (InvalidOperationException ex) {
                    result = ex.Message;
                }
                Send(handler, result);
            }
            else
            {
                // Not all data received. Get more.
                handler.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0,
                                     new AsyncCallback(ReadCallback), state);
            }
        }
    }