⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gameprotocolhandler.java

📁 J2ME MIDP_Example_Applications
💻 JAVA
字号:
// Copyright 2002 Nokia Corporation. // // THIS SOURCE CODE IS PROVIDED 'AS IS', WITH NO WARRANTIES WHATSOEVER, // EXPRESS OR IMPLIED, INCLUDING ANY WARRANTY OF MERCHANTABILITY, FITNESS // FOR ANY PARTICULAR PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE // OR TRADE PRACTICE, RELATING TO THE SOURCE CODE OR ANY WARRANTY OTHERWISE // ARISING OUT OF ANY PROPOSAL, SPECIFICATION, OR SAMPLE AND WITH NO // OBLIGATION OF NOKIA TO PROVIDE THE LICENSEE WITH ANY MAINTENANCE OR // SUPPORT. FURTHERMORE, NOKIA MAKES NO WARRANTY THAT EXERCISE OF THE // RIGHTS GRANTED HEREUNDER DOES NOT INFRINGE OR MAY NOT CAUSE INFRINGEMENT // OF ANY PATENT OR OTHER INTELLECTUAL PROPERTY RIGHTS OWNED OR CONTROLLED // BY THIRD PARTIES // // Furthermore, information provided in this source code is preliminary, // and may be changed substantially prior to final release. Nokia Corporation // retains the right to make changes to this source code at // any time, without notice. This source code is provided for informational // purposes only. // // Nokia and Nokia Connecting People are registered trademarks of Nokia// Corporation.// Java and all Java-based marks are trademarks or registered trademarks of// Sun Microsystems, Inc.// Other product and company names mentioned herein may be trademarks or// trade names of their respective owners.// // A non-exclusive, non-transferable, worldwide, limited license is hereby // granted to the Licensee to download, print, reproduce and modify the // source code. The licensee has the right to market, sell, distribute and // make available the source code in original or modified form only when // incorporated into the programs developed by the Licensee. No other // license, express or implied, by estoppel or otherwise, to any other // intellectual property rights is granted herein.package example.fruitmachine;import java.io.*;import java.util.*;import javax.servlet.*;import javax.servlet.http.*;class GameProtocolHandler {    static class InvalidRequestException        extends Exception    {        InvalidRequestException(String message)        {            super(message);        }        InvalidRequestException()        {            super();        }    }    private final UserDatabase userDatabase;    GameProtocolHandler(UserDatabase userDatabase)    {        this.userDatabase = userDatabase;    }    void doPost(HttpServletRequest  request,                HttpServletResponse response)        throws IOException, ServletException    {        String requestStr = getRequestString(request);        ValueGenerator generator = new ValueGenerator();        ValueParser parser = new ValueParser(requestStr);        String command   = parser.getNextValue();        if ("login".equals(command))        {            handleLoginRequest(parser, generator, request, response);        }        else        {            HttpSession session = request.getSession(false);            if (session == null)            {                throw new IOException("Must login");            }            else if ("spin".equals(command))            {                handleSpinRequest(parser, generator, session);            }            else if ("buy".equals(command))            {                handleBuyRequest(parser, generator, session);            }            else if ("logout".equals(command))            {                handleLogoutRequest(generator, session);            }            else            {                throw new IOException("Invalid command");            }        }                    String responseStr = generator.getString();        setResponseString(response, responseStr);    }    private String getRequestString(HttpServletRequest request)        throws IOException    {        InputStream in = request.getInputStream();        int requestLength = request.getContentLength();        if (requestLength == -1)        {            throw new IOException("Need to know request length");        }        StringBuffer buf = new StringBuffer(requestLength);        for (int i = 0; i < requestLength; ++i)        {            int ch = in.read();            if (ch == -1)            {                break;            }            buf.append((char)ch);        }        in.close();        return buf.toString();    }    private void setResponseString(HttpServletResponse response,                                   String responseStr)        throws IOException    {        response.setContentType("text/plain");        PrintWriter out = response.getWriter();        out.write(responseStr);        out.close();    }    private void handleLoginRequest(ValueParser parser,                                    ValueGenerator generator,                                    HttpServletRequest request,                                    HttpServletResponse response)    {        try        {            String name = getStringValue(parser);            String password = getStringValue(parser);            if ((name == null) || (name.length() == 0) )            {                throw new InvalidRequestException("Missing name");            }            else if (password == null)    // length 0 is OK            {                throw new InvalidRequestException("Missing password");            }            else            {                User user = userDatabase.getUser(name);                if ((user == null) || !user.isCorrectPassword(password))                {                    throw new InvalidRequestException(                        "Name or password incorrect");                }                else                {                    FruitMachine fruitMachine = new FruitMachine(user);                    HttpSession session = request.getSession(true);                    session.setAttribute("User", user);                    session.setAttribute("FruitMachine", fruitMachine);                    String requestUrl = request.getRequestURL().toString();                    String rewrittenUrl = response.encodeURL(requestUrl);                    response.setHeader("X-RewrittenURL", rewrittenUrl);                    generator.addValue("login-OK");                    generator.addValue(Integer.toString(user.getCredit()));                }            }        }        catch (InvalidRequestException e)        {            generateErrorResponse(generator, "login-error", e.getMessage());        }    }    private void generateErrorResponse(ValueGenerator generator,                                       String errorName,                                       String message)    {        generator.addValue(errorName);        generator.addValue(message);    }    private void handleSpinRequest(ValueParser parser,                                   ValueGenerator generator,                                   HttpSession session)    {        try        {            User user = (User)(session.getAttribute("User"));            FruitMachine fruitMachine =                (FruitMachine)(session.getAttribute("FruitMachine"));            int bet = getIntValue(parser);            boolean hold0 = getBooleanValue(parser);            boolean hold1 = getBooleanValue(parser);            boolean hold2 = getBooleanValue(parser);            FruitMachine.SpinResult result =                fruitMachine.spin(bet, hold0, hold1, hold2);            if (result.isWin())            {                generator.addValue("spin-win");                generator.addValue(Integer.toString(result.getWinAmount()));            }            else            {                generator.addValue("spin-lose");            }            generator.addValue(Integer.toString(user.getCredit()));            generator.addValue(Integer.toString(result.getWheel(0)));            generator.addValue(Integer.toString(result.getWheel(1)));            generator.addValue(Integer.toString(result.getWheel(2)));        }        catch (FruitMachine.InvalidPlayException e)        {            generateErrorResponse(generator, "spin-error", e.getMessage());        }        catch (InvalidRequestException e)        {            generateErrorResponse(generator, "spin-error", e.getMessage());        }    }    private void handleBuyRequest(ValueParser parser,                                  ValueGenerator generator,                                  HttpSession session)    {        try        {            User user = (User)(session.getAttribute("User"));                        int amount = getIntValue(parser);            // this should go off to credit card issuer etc.            user.addCredit(amount);            generator.addValue("buy-OK");            generator.addValue(Integer.toString(user.getCredit()));        }        catch (InvalidRequestException e)        {            generateErrorResponse(generator, "buy-error", e.getMessage());        }    }    private void handleLogoutRequest(ValueGenerator generator,                                     HttpSession session)    {        session.invalidate();        generator.addValue("logout-OK");    }    private String getStringValue(ValueParser parser)        throws InvalidRequestException    {        String value = parser.getNextValue();        if (value == null)        {            throw new InvalidRequestException("Missing value");        }        return value;    }    private int getIntValue(ValueParser parser)        throws InvalidRequestException    {        String valueStr = getStringValue(parser);        int value;        try        {            value = Integer.parseInt(valueStr);        }        catch (NumberFormatException e)        {            throw new InvalidRequestException("Value \"" + valueStr +                                              "\" is not a valid integer");        }                                     return value;    }    private boolean getBooleanValue(ValueParser parser)        throws InvalidRequestException    {        String valueStr = getStringValue(parser);        boolean value = false;        if (valueStr.equals("true"))        {            value = true;        }        else if (valueStr.equals("false"))        {            value = false;        }        else        {            throw new InvalidRequestException("Value \"" + valueStr +                                              "\" is not a valid boolean");        }        return value;    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -