Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ByteArray = function(packet)
- local binary,packet,packet2 = {}, packet;if packet == nil then packet = ""; end
- binary.encode = function(str)local out = {};for k in string.gmatch(str, ".") do local value = k:byte();local bin = "";repeat bin = (value % 2) .. bin;value = math.floor(value / 2);until value == 0 table.insert(out, ("0"):rep(8 - #bin) .. bin) end return table.concat(out); end
- binary.decode = function(str)local out = {};if #str % 8 ~= 0 then error("Invalid binary input", 0);end for k in string.gmatch(str, "........") do table.insert(out, tonumber(k, 2)) end return string.char(table.unpack(out)); end
- local split=function(t,s)local a={};for i,v in string.gmatch(t,string.format("[^%s]+",s or "%s")) do table.insert(a,i);end return a; end
- local readUTF=function()packets = split(packet,"");packet="";packet2="";for i=2,#packets do packet=packet..packets[i].."";end packet2 = packet2..binary.decode(packets[1]);return {packet=tostring(packet2),readUTF=ByteArray(packet).readUTF,readInt=ByteArray(packet).readInt}; end
- local readInt=function()packets = split(packet,"");packet="";packet2="";for i=2,#packets do packet=packet..packets[i].."";end packet2 = packet2..binary.decode(packets[1]);return {packet=tonumber(packet2),readUTF=ByteArray(packet).readUTF,readInt=ByteArray(packet).readInt}; end
- local write=function(str)packet = packet..""..binary.encode(str);return {toByteArray=packet,write=ByteArray(packet).write,readUTF=ByteArray(packet).readUTF,readInt=ByteArray(packet).readInt};end
- return {toByteArray=packet,write=write,readUTF=readUTF,readInt=readInt}
- end
- -- Exemplo 1:
- packet = ByteArray()
- packet = packet.write('Test 1')
- packet = packet.write(2)
- packet = packet.toByteArray
- print (packet) -- printa o packet
- packet = ByteArray(packet)
- value_1 = packet.readUTF() -- Para retornar string (Vai pegar o Test 1 que é o primeiro write)
- value_2 = packet.readInt() -- Para retornar int (Vai pegar o 2 que é o segundo write)
- value_1 = value_1.packet -- Agora ele pega a string após ler
- value_2 = value_2.packet
- print(value_1..'('..type(value_1)..') - '..value_2..'('..type(value_2)..')')
- --[[
- O print acima vai imprimir no chat #lua:
- Test 1(string) - 2(number)
- ]]--
- -- Exemplo 2:
- packet = ByteArray().write('Test 2').write(4).toByteArray -- ByteArray().escrever('Test 2').escrever(4).para bytearray(pega a string convertida para byte)
- print (packet) -- printa o packet
- packet = ByteArray(packet)
- value_1 = packet.readUTF().packet -- Para retornar string (Vai pegar o Test 1 que é o primeiro write) ele agora vai ler também
- value_2 = packet.readInt().packet -- Para retornar int (Vai pegar o 2 que é o segundo write) ele agora vai ler também
- print(value_1..'('..type(value_1)..') - '..value_2..'('..type(value_2)..')')
- --[[
- O print acima vai imprimir no chat #lua:
- Test 2(string) - 4(number)
- ]]--
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement