1. Java / Говнокод #4374

    +144

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    69. 69
    70. 70
    71. 71
    72. 72
    73. 73
    74. 74
    75. 75
    76. 76
    77. 77
    78. 78
    79. 79
    80. 80
    81. 81
    82. 82
    83. 83
    84. 84
    85. 85
    public void onMessage(final NetConnection connection, final NetMessage message) {
        final ClientConnection client = (ClientConnection) connection;
        if (message.isCommand(Protocol.CMD_LOGIN)) {
          if (this.auth(client,
              message.getParameter(Protocol.PARAM_NAME, String.class))) {
            final NetMutableMessage msgLogin = new NetMutableMessage(
                Protocol.CMD_LOGIN);
            msgLogin.addParameter(Protocol.PARAM_FROM, client.getNick());
            this.writeMessage(client, null, msgLogin);
          } else {
            this.removeConnection(client);
          }
        }
        if (message.isCommand(Protocol.CMD_LOGOUT)) {
          final NetMutableMessage msgLogout = new NetMutableMessage(
              Protocol.CMD_LOGOUT);
          msgLogout.addParameter(Protocol.PARAM_FROM, client.getNick());
          this.writeMessage(client, null, msgLogout);
          this.removeConnection(client);
        }
        if (message.isCommand(Protocol.CMD_STATUS)) {
          final NetMutableMessage msgStatus = new NetMutableMessage(
              Protocol.CMD_STATUS);
          msgStatus.addParameter(Protocol.PARAM_TYPE,
              message.getParameter(Protocol.PARAM_TYPE));
          msgStatus.addParameter(Protocol.PARAM_FROM, client.getNick());
          this.writeMessage(client, null, message);
          this.removeConnection(client);
        }
        if (message.isCommand(Protocol.CMD_USERS)) {
          final NetMutableMessage msgUsers = new NetMutableMessage(
              Protocol.CMD_USERS);
          msgUsers.addParameter("list", this.getUsers(connection));
          this.writeMessage(client, msgUsers, null);
        }
        if (message.isCommand(Protocol.CMD_SAY)) {
          final NetMutableMessage msgSay = new NetMutableMessage(Protocol.CMD_SAY);
          msgSay.addParameter(Protocol.PARAM_FROM, client.getNick());
          msgSay.addParameter(Protocol.PARAM_MESSAGE,
              message.getParameter(Protocol.PARAM_MESSAGE));
          if (null == message.getParameter(Protocol.PARAM_TO)) {
            this.writeMessage(client, msgSay, msgSay);
          } else {
            this.writeMessage(
                message.getParameter(Protocol.PARAM_TO, String.class), msgSay, null);
          }
        }
        if (message.isCommand(Protocol.CMD_MOVE)) {
          final NetMutableMessage msgMove = new NetMutableMessage(Protocol.CMD_MOVE);
          msgMove.addParameter(Protocol.PARAM_FROM, client.getNick());
          msgMove.addParameter(Protocol.PARAM_CODE,
              message.getParameter(Protocol.PARAM_CODE));
          this.writeMessage(message.getParameter(Protocol.PARAM_TO, String.class),
              msgMove, null);
        }
        if (message.isCommand(Protocol.CMD_OFFER)) {
          final NetMutableMessage msgOffer = new NetMutableMessage(
              Protocol.CMD_OFFER);
          msgOffer.addParameter(Protocol.PARAM_FROM, client.getNick());
          this.writeMessage(message.getParameter(Protocol.PARAM_TO, String.class),
              msgOffer, null);
        }
        if (message.isCommand(Protocol.CMD_ACCEPT)) {
          final NetMutableMessage msgAccept = new NetMutableMessage(
              Protocol.CMD_ACCEPT);
          msgAccept.addParameter(Protocol.PARAM_FROM, client.getNick());
          this.writeMessage(message.getParameter(Protocol.PARAM_TO, String.class),
              msgAccept, null);
        }
        if (message.isCommand(Protocol.CMD_DECLINE)) {
          final NetMutableMessage msgDecline = new NetMutableMessage(
              Protocol.CMD_DECLINE);
          msgDecline.addParameter(Protocol.PARAM_FROM, client.getNick());
          this.writeMessage(message.getParameter(Protocol.PARAM_TO, String.class),
              msgDecline, null);
        }
        if (message.isCommand(Protocol.CMD_END)) {
          final NetMutableMessage msgEnd = new NetMutableMessage(Protocol.CMD_END);
          msgEnd.addParameter("player1",
              message.getParameter(Protocol.PARAM_TO, String.class));
          msgEnd.addParameter("player2", client.getNick());
          this.writeMessage(message.getParameter(Protocol.PARAM_TO, String.class),
              null, msgEnd);
        }
      }

    нагкодил свежачок, прямиком из IDE Eclipse :)

    разрабатываю сетевую мини-игрушку с чатом. Данный метод -- из серверной части, где сервер принимает приходящие сообщения и реагирует на них.
    Обьем метода и однородность кусков намекает, что это пора рефакторить - вот думаю как.

    Запостил: Lure Of Chaos, 17 Октября 2010

    Комментарии (10) RSS

    • >NetMutableMessage
      вот и хряпнул мутабельного ...
      Ответить
    • эклипс сакс, idea рулез.
      Автору читать про полиморфизм и паттерн "стратегия")
      Ответить
    • Первое, неконструктивное: чел, если ты это спрашиваешь, ты нуб. Тебе надо учиться, читай книжки.

      Второе, конструктивное: на мой взгляд здесь нужно применить Hashed Adapter Objects. Сделай
      interface  CommandHandler {
      handleCommand(request, response)
      }


      Свой метод onMessage перепиши в таком ключе:
      for (Map.Entry commandToAdapter: commands) {
      if (message.isCommand(commandToAdapter.getKey()) {
       NetMutableMessage reply = new NetMutableMessage(commandToAdapter.getKey());
        reply.addParameter(Protocol.PARAM_FROM, client.getNick());
        commandToAdapter.getValue().handleCommand(message, reply);  
      }
      }


      Естественно при старте сервиса мапу commandToAdapter надо правильно заполнить.

      Откытым остается вопрос в каком месте отписывать ответ в самом методе onMessage или в хэндлерах.

      Как-то так.
      Ответить
      • Ну почему сразу нуб? Вполне возможно вопрос был риторическим. Вы же сами в конце пишете "Открытым остается вопрос в каком месте отписывать ответ в самом методе onMessage или в хэндлерах" - может именно это и имел ввиду автор под своим "вот думаю", или просто хотел обсудить те или иные варианты решения.
        Ответить

    Добавить комментарий