PageRenderTime 28ms CodeModel.GetById 15ms RepoModel.GetById 0ms app.codeStats 0ms

/game_client/src/com/jediflasher/game_client/server/MessageWrapper.as

http://mmorpg-client-server-learning.googlecode.com/
ActionScript | 110 lines | 66 code | 20 blank | 24 comment | 6 complexity | 35d0543b8fa1173b5e8c24348bdb5c58 MD5 | raw file
  1. /**
  2. * User: Obi
  3. * Date: 31.07.11
  4. * Time: 16:33
  5. */
  6. package com.jediflasher.game_client.server {
  7. import com.jediflasher.game_client.server.messages.ChangeUsers;
  8. import com.jediflasher.game_client.server.messages.CharacterInfoResponse;
  9. import com.jediflasher.game_client.server.messages.Header;
  10. import com.jediflasher.game_client.server.messages.LoginResponse;
  11. import com.jediflasher.game_client.server.messages.MethodLogin;
  12. import com.jediflasher.game_client.server.messages.MethodMovement;
  13. import com.jediflasher.game_client.server.messages.ServiceType;
  14. import com.jediflasher.game_client.server.messages.WorldInfoResponse;
  15. import com.netease.protobuf.Message;
  16. import flash.utils.IDataInput;
  17. public class MessageWrapper {
  18. public function MessageWrapper() {
  19. super();
  20. }
  21. /**
  22. * Id ?????????? ???????, ???????? LOGIN
  23. */
  24. public var serviceType:int;
  25. /**
  26. * ?????????? Id ???????. ?? ???? ????? ??????????, ?? ????? ????????? ????????? ??????? ??????
  27. */
  28. public var requestId:int;
  29. /**
  30. * ??? ?????????, ???????? MessageWrapper.MESSAGE_TYPE_ERROR
  31. */
  32. public var messageType:int;
  33. /**
  34. * ??? ????????? ?? ??????????? ???????
  35. */
  36. public var method:int;
  37. /**
  38. * ???? ?????????, ????????????????? brotobuf
  39. */
  40. public var message:Message;
  41. private var _header:Header;
  42. /**
  43. * ????????? ???????? ?????? ?????????, ??? ?????????? ??????????? ?????????, ????? ??????? ????? readMessage
  44. */
  45. public function read(input:IDataInput):MessageWrapper {
  46. var headerSize:int = input.readInt();
  47. _header = new Header();
  48. _header.readFromSlice(input, input.bytesAvailable - headerSize);
  49. this.serviceType = _header.serviceType;
  50. this.messageType = _header.messageType;
  51. this.requestId = _header.requestId;
  52. this.method = _header.method;
  53. // ????? ?????? ????? ??? ????
  54. if (_header.bodySize == 0) return this;
  55. switch (_header.serviceType) {
  56. case ServiceType.LOGIN:
  57. message = readAsLoginMessage();
  58. break;
  59. case ServiceType.MOVEMENT:
  60. message = readAsMovementMessage();
  61. break;
  62. }
  63. if (message) message.readFromSlice(input, input.bytesAvailable - _header.bodySize);
  64. return this;
  65. }
  66. private function readAsLoginMessage():Message {
  67. switch (this.method) {
  68. case MethodLogin.LOGIN:
  69. return new LoginResponse();
  70. }
  71. return null;
  72. }
  73. private function readAsMovementMessage():Message {
  74. switch (this.method) {
  75. case MethodMovement.CHARACTER_MOVE:
  76. case MethodMovement.CHARACTER_INFO:
  77. return new CharacterInfoResponse();
  78. case MethodMovement.WORLD_INFO:
  79. return new WorldInfoResponse();
  80. case MethodMovement.USERS_ADD:
  81. case MethodMovement.USERS_REMOVE:
  82. return new ChangeUsers();
  83. }
  84. return null;
  85. }
  86. public function toString():String {
  87. return "header >\n"+ _header+"\nmessage >\n"+message;
  88. }
  89. }
  90. }