Add/get table functions implemented on ext charlist

This commit is contained in:
Henrique Santiago
2012-08-30 02:59:10 -03:00
parent d98f6f7673
commit c517f7b745
10 changed files with 120 additions and 8 deletions

View File

@@ -295,3 +295,10 @@ KeyCodeDescs = {
[KeyNumpad8] = 'Numpad8',
[KeyNumpad9] = 'Numpad9'
}
NetworkMessageTypes = {
Boolean = 1,
Number = 2,
String = 3,
Table = 4
}

View File

@@ -19,3 +19,6 @@ Module
dofile 'mouse'
dofiles 'ui'
dofile 'inputmessage'
dofile 'outputmessage'

View File

@@ -0,0 +1,26 @@
function InputMessage:getData()
local dataType = self:getU8()
if dataType == NetworkMessageTypes.Boolean then
return numbertoboolean(self:getU8())
elseif dataType == NetworkMessageTypes.Number then
return self:getU64()
elseif dataType == NetworkMessageTypes.String then
return self:getString()
elseif dataType == NetworkMessageTypes.Table then
return self:getTable()
else
perror('Unknown data type ' .. dataType)
end
return nil
end
function InputMessage:getTable()
local ret = {}
local size = self:getU32()
for i=1,size do
local index = self:getData()
local value = self:getData()
ret[index] = value
end
return ret
end

View File

@@ -0,0 +1,42 @@
function OutputMessage:addData(data)
if type(data) == 'boolean' then
self:addU8(NetworkMessageTypes.Boolean)
self:addU8(booleantonumber(data))
elseif type(data) == 'number' then
self:addU8(NetworkMessageTypes.Number)
self:addU64(data)
elseif type(data) == 'string' then
self:addU8(NetworkMessageTypes.String)
self:addString(data)
elseif type(data) == 'table' then
self:addU8(NetworkMessageTypes.Table)
self:addTable(data)
else
perror('Invalid data type ' .. type(data))
end
end
function OutputMessage:addTable(data)
local size = 0
-- reserve for size
local sizePos = self:getWritePos()
self:addU32(size)
local sizeSize = self:getWritePos() - sizePos
-- add values
for key,value in pairs(data) do
self:addData(key)
self:addData(value)
size = size + 1
end
-- write size
local currentPos = self:getWritePos()
self:setWritePos(sizePos)
self:addU32(size)
-- fix msg size and go back to end
self:setMessageSize(self:getMessageSize() - sizeSize)
self:setWritePos(currentPos)
end

View File

@@ -244,6 +244,22 @@ function fromboolean(boolean)
end
end
function booleantonumber(boolean)
if boolean then
return 1
else
return 0
end
end
function numbertoboolean(number)
if number ~= 0 then
return true
else
return false
end
end
function signalcall(param, ...)
if type(param) == 'function' then
local status, ret = pcall(param, ...)