@Override
    public void messageReceived(ChannelHandlerContext ctx, MessageEvent e)
    {
        HttpRequest request = (HttpRequest) e.getMessage();
        HttpResponseStatus status = OK;
        String stringResult;
        String phpResult;
        File filePath = new File(getURIRequest(request));
        if(filePath.exists())
        {
            //result diambil dari request ke PHP RMI server dahulu
            stringResult = new PHPSourceParser().getResultRunCompiledPHPCode(getURIRequest(request));

            PHPExecEngine phpEngine = new PHPExecEngine()
            {

                @Override
                public void beforeExecute(PHPExecEngine engine)
                {
                    System.out.println("Before Execute");
                }

                @Override
                public void afterExecute(PHPExecEngine engine)
                {
                    System.out.println("After Execute");
                }
            };

            //hasilnya baru kemudian dikirim ke client (server PHP), dan diproses oleh
            // CLI server PHP tersebut, untuk dirender ke view browser
            phpResult = phpEngine.getResultExec(cliCommand + " \" " + stringResult + " \"");

            try
            {
                phpResult = new AppClient().getResultRMIClient(phpResult);
            }
            catch(RemoteException ex)
            {
                String stackTrace = "";
                for(int i = 1; i < ex.getStackTrace().length; i++)
                {
                    stackTrace += ex.getStackTrace()[i] + "<br/>";
                }

                phpResult = ResponseConstant.internalServerError("Internal Server Error", stackTrace);
            }
            catch(NotBoundException ex)
            {
                String stackTrace = "";
                for(int i = 1; i < ex.getStackTrace().length; i++)
                {
                    stackTrace += ex.getStackTrace()[i] + "<br/>";
                }

                phpResult = ResponseConstant.internalServerError("Internal Server Error", stackTrace);
            }
        }
        else
        {
            phpResult = ResponseConstant.notFound;
        }

        HttpResponse response = new DefaultHttpResponse(HTTP_1_1, status);
        response.setHeader(CONTENT_TYPE, "text/html; charset=UTF-8");
        response.setContent(ChannelBuffers.copiedBuffer(phpResult, CharsetUtil.UTF_8));
        Channel ch = e.getChannel();
        ChannelFuture writeFuture;
        writeFuture = ch.write(response);
        writeFuture.addListener(new ChannelFutureProgressListener()
        {

            public void operationComplete(ChannelFuture future)
            {
                future.getChannel().close();
            }

            public void operationProgressed(ChannelFuture future, long amount, long current, long total)
            {
                System.out.printf(" %d / %d (+%d)%n", current, total, amount);
            }
        });

        // Decide whether to close the connection or not.
        if(!isKeepAlive(request))
        {
            // Close the connection when the whole content is written out.
            writeFuture.addListener(ChannelFutureListener.CLOSE);
        }
    }