_istream.lua 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196
  1. -- Warning: do not edit this file.
  2. -- 警告: 不要编辑此文件
  3. local _M = {ARRAY_LIMIT = 65536}
  4. _M.__index = _M
  5. local NULL_MESSAGE_CODE = -1
  6. local CODE_OK = 200
  7. local CODE_ERROR = 500
  8. function _M:GetU8()
  9. return self.stream:GetU8()
  10. end
  11. function _M:GetS8()
  12. return self.stream:GetS8()
  13. end
  14. function _M:GetS16()
  15. return self.stream:GetS16()
  16. end
  17. function _M:GetU16()
  18. return self.stream:GetU16()
  19. end
  20. function _M:GetS32()
  21. return self.stream:GetS32()
  22. end
  23. function _M:GetU32()
  24. return self.stream:GetU32()
  25. end
  26. function _M:GetS64()
  27. return self.stream:GetS64()
  28. end
  29. function _M:GetU64()
  30. return self.stream:GetU64()
  31. end
  32. function _M:GetF32()
  33. return self.stream:GetF32()
  34. end
  35. function _M:GetF64()
  36. return self.stream:GetF64()
  37. end
  38. function _M:GetBool()
  39. return self.stream:GetBool()
  40. end
  41. function _M:GetUnicode()
  42. return self.stream:GetUnicode()
  43. end
  44. function _M:GetUTF()
  45. return self.stream:GetUTF()
  46. end
  47. function _M:GetEnum8()
  48. return self.stream:GetEnum8()
  49. end
  50. function _M:GetEnum32()
  51. return self.stream:GetEnum8()
  52. end
  53. function _M:GetDateTime()
  54. return self.stream:GetDateTime()
  55. end
  56. function _M:GetTimeSpan()
  57. return self.stream:GetTimeSpan()
  58. end
  59. function _M:GetBytes()
  60. return self.stream:GetBytes()
  61. end
  62. function _M:GetArray(elefn, objTemplate)
  63. local len = self.stream:GetVS32()
  64. if len < 0 or len > self.ARRAY_LIMIT then
  65. return nil
  66. end
  67. local ret = {}
  68. for i = 1, len do
  69. local obj = elefn(self, Protocol.Serializer.StringDefined[objTemplate])
  70. if obj == nil then
  71. obj = false
  72. end
  73. table.insert(ret, obj)
  74. end
  75. return ret
  76. end
  77. function _M:GetList(elefn, objTemplate)
  78. local len = self.stream:GetVS32()
  79. -- print('GetList ',objTemplate, len)
  80. if len < 0 or len > self.ARRAY_LIMIT then
  81. return nil
  82. end
  83. local ret = {}
  84. for i = 1, len do
  85. local obj = elefn(self, Protocol.Serializer.StringDefined[objTemplate])
  86. if obj == nil then
  87. obj = false
  88. end
  89. table.insert(ret, obj)
  90. end
  91. return ret
  92. end
  93. function _M:GetMap(keyfn, valfn, keyTypeStr, valTypeStr)
  94. local len = self.stream:GetVS32()
  95. -- print('GetMap',valTypeStr, len)
  96. if len < 0 or len > self.ARRAY_LIMIT then
  97. return nil
  98. end
  99. local ret = {}
  100. for i = 1, len do
  101. ret[keyfn(self, Protocol.Serializer.StringDefined[keyTypeStr])] =
  102. valfn(self, Protocol.Serializer.StringDefined[valTypeStr])
  103. end
  104. return ret
  105. end
  106. local function GetCodeMessage(name, code)
  107. local messageCodes = MessageCodeAttribute[name]
  108. return messageCodes and messageCodes[code] or 'unknown error'
  109. end
  110. local function IsMessageNull(ret)
  111. return not ret.s2c_msg or ret.s2c_msg == ''
  112. end
  113. local function CshapFormat(s2c_msg, s2c_args)
  114. local function search(k)
  115. return tostring(s2c_args[k + 1])
  116. end
  117. return string.gsub(s2c_msg, '{(%d+)}', search)
  118. end
  119. local function EndReadRouteOBJ(ret)
  120. if IsMessageNull(ret) then
  121. if ret.s2c_code == CODE_OK or ret.s2c_code == CODE_ERROR then
  122. if ret.InnerResponse then
  123. EndReadRouteOBJ(ret.InnerResponse)
  124. ret.InnerResponse.s2c_msg = CshapFormat(ret.InnerResponse.s2c_msg, ret.InnerResponse.s2c_args)
  125. ret.s2c_msg = ret.InnerResponse.s2c_msg
  126. end
  127. end
  128. if IsMessageNull(ret) then
  129. ret.s2c_msg = GetCodeMessage(ret.Name, ret.s2c_code)
  130. end
  131. if IsMessageNull(ret) and ret.InnerResponse then
  132. ret.s2c_msg = ret.InnerResponse.s2c_msg
  133. end
  134. end
  135. end
  136. function _M:GetRouteOBJ(route)
  137. local objTemplate = Protocol.Serializer[route]
  138. local ret = setmetatable({}, objTemplate)
  139. objTemplate.Read(self, ret)
  140. EndReadRouteOBJ(ret)
  141. return ret, objTemplate
  142. end
  143. function _M:GetOBJ(objTemplate)
  144. local id = self:GetS32()
  145. if id ~= NULL_MESSAGE_CODE then
  146. objTemplate = Protocol.Serializer[id]
  147. if not objTemplate then
  148. error('Template Message not find ' .. id)
  149. end
  150. local ret = setmetatable({}, objTemplate)
  151. objTemplate.Read(self, ret)
  152. return ret
  153. end
  154. end
  155. function _M:Dispose()
  156. self.stream:Dispose()
  157. end
  158. function _M.Create(bytes)
  159. local ret = setmetatable({}, _M)
  160. ret.stream = LuaInputStream(bytes)
  161. return ret
  162. end
  163. return _M