Перейти к контенту

Справочник по функциям и классам


Рекомендуемые сообщения

Полтергейст, интересная находка, выкладывай что накопаешь. Если можно несколько примеров - как тестировал, использовал. Изменено пользователем Andrey07071977

Поделиться этим сообщением


Ссылка на сообщение

@Malandrinus, в контексте работы с нет пакетами

 

кусок кода из xs_store

--write variable to tail
tail_pk:w_u8(allowed_types_rev[lua_type])
tail_pk:w_stringZ(key)
if lua_type=='string' then
tail_pk:w_stringZ(val)
elseif lua_type=='number' then
tail_pk:w_float(val)
elseif lua_type=='boolean' then
tail_pk:w_u8(val)
elseif lua_type=='table' then
tail_pk:w_stringZ(serialized_tables[key])
end

 

 

 

Пытаюсь настроить твой ogse_unist в ЗП но ловлю вылеты типа:

 

... not enough storage to process the command...

... not enough memory ...

 

Вылет происходит гдето в pk:get(), но пока не знаю точно где. Решил помотреть как xStream сделала и наткнулся на tail packets. Artos также их использует

 

П.С> вылетает не всегда, примерно через раз



Вот функция из модуля для работы с пакетами

 

function net_base:get()
if not (self.obj and self._mode ~= 0) then return {} end --/> zero
dlog("(%s) in net_base:get()", self_name)
--/ preparation
local stpk,uppk = nil,nil
local stsz,upsz = 0,0
if bit_and(self._mode, 1) ~= 0 then
stpk = net_packet()
dlog("(%s) in net_base:get() got empty packet stpk = net_packet()", self_name)
-- stpk:w_begin(0) --/ installation in the package beginning (+2)
stpk:w_begin()
self.obj:STATE_Write(stpk)
stpk:r_seek(2) --/ installation of the beginning (+2) of reading
stsz = stpk:r_tell()
end
dlog("net_base:get:(%s)%s):m(%s)/st(%s)/up(%s):[%s]", self.obj:name(), self.name, self._mode, self._can_st, self._can_up, ">")
if bit_and(self._mode, 2) ~= 0 then
uppk = net_packet()
uppk:w_begin(0) --/ installation in the package beginning (+2)
self.obj:UPDATE_Write(uppk)
uppk:r_seek(2) --/ installation of the beginning (+2) of reading
upsz = uppk:r_tell()
end
local t = {}
if uppk ~= nil then
t.upd = {} --/ sub-table for update-propeties
end
--/ read
if self.dbg then log("net_base:get:(%s)%s):m(%s)/st(%s)/up(%s):[%s]", self.obj:name(), self.name, self._mode, self._can_st, self._can_up, ">") end --/#~#
self:_read(t, stpk, uppk)
if self.dbg then log("net_base:get:(%s)%s):m(%s)/st(%s)/up(%s):[%s]", self.obj:name(), self.name, self._mode, self._can_st, self._can_up, "<") end --/#~#
--/ check state size and tail
if stpk ~= nil then
self.size = stpk:r_tell() - stsz
if not stpk:r_eof() then --/ exist left?
t.__tail = tail_data():peekFrom(stpk)
t.__tail_size = t.__tail.pk:w_tell() - t.__tail.pk:r_tell()
if true or self.dbg then log("net_base:get:obj=[%s]%s):mode=[%s]:tail(st)=[%s]:<%s>", self.obj:name(), self.name, self._mode, t.__tail_size, "Info!") end --/#~#
end
end
--/ check update size and tail
if uppk ~= nil then
self.size_upd = uppk:r_tell() - upsz
if not uppk:r_eof() then --/ exist left?
t.upd.__tail = tail_data():peekFrom(uppk)
t.upd.__tail_size = t.upd.__tail.pk:w_tell() - t.upd.__tail.pk:r_tell()
if true or self.dbg then log("net_base:get:obj=[%s]%s):mode=[%s]:tail(up)=[%s]:<%s>", self.obj:name(), self.name, self._mode, t.upd.__tail_size, "Info!") end --/#~#
end
end
dlog("(%s) net_base:get() succes, return size = %s", self_name, table.size(t))
return t --/>
end

 

После того как изменил

-- stpk:w_begin(0) --/ installation in the package beginning (+2)
на
stpk:w_begin()
вроде бы перестало вылетать... thoughts?
Изменено пользователем Andrey07071977

Поделиться этим сообщением


Ссылка на сообщение
  • Недавно просматривали   0 пользователей

    • Ни один зарегистрированный пользователь не просматривает эту страницу.
  • Куратор(ы) темы:

×
×
  • Создать...