Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- function convertToPacket(data)
- {
- local packet = "";
- switch(typeof(data))
- {
- case "array": packet += convertArrayToPacket(data); break;
- case "table": packet += convertTabToPacket(data); break;
- case "string": packet += format(" S %s", strrep(data, " ", "*"));break;
- case "integer": packet += format(" I %s", data.tostring()); break;
- case "float": packet += format(" F %s", data.tostring()); break;
- case "bool": packet += format(" B %s", data ? "1" : "0"); break;
- case "instance": packet += convertTabToPacket(data.toPacket()); break;
- }
- return packet;
- }
- function convertArrayToPacket(data)
- {
- local packet = " AS";
- for(local i = 0; i < data.len(); i++)
- {
- packet += format(" AN %s", convertToPacket(data[i]));
- }
- packet += " AE";
- return packet;
- }
- function convertTabToPacket(data)
- {
- local packet = " TS";
- foreach(key, item in data)
- {
- packet += format(" SLOT %s %s", key.tostring(), convertToPacket(item));
- }
- packet += " TE";
- return packet;
- }
- function receiveFromPacket(packet)
- {
- packet += " END";
- local dane = convertPacket(packet);
- return dane.data;
- }
- function convertPacket(packet)
- {
- local data;
- packet = lstrip(packet);
- local exit = false;
- do
- {
- local result = sscanf("ss", packet);
- if(result)
- {
- local word = result[0];
- local other = result[1];
- switch(word)
- {
- //array
- case "AS":
- data = [];
- packet = other;
- break;
- case "AN":
- local result2 = convertPacket(other);
- data.push(result2.data);
- packet = result2.text;
- break;
- case "AE":
- exit = true;
- packet = other;
- break;
- //table
- case "TS":
- data = {};
- packet = other;
- break;
- case "TE":
- exit = true;
- packet = other;
- break;
- case "SLOT":
- local result2 = sscanf("ss", other)
- local slotName = result2[0];
- local result3 = convertPacket(result2[1]);
- try{ slotName = slotName.tointeger()} catch(error){ }
- data[slotName] <- result3.data;
- packet = result3.text;
- break;
- //Zwykłe zmienne
- case "S":
- local result2 = sscanf("ss", other);
- data = strrep(result2[0], "*", " ")
- packet = result2[1];
- exit = true;
- break;
- case "I":
- local result2 = sscanf("ds", other);
- data = result2[0]
- packet = result2[1];
- exit = true;
- break;
- case "F":
- local result2 = sscanf("fs", other);
- data = result2[0]
- packet = result2[1];
- exit = true;
- break;
- case "B":
- local result2 = sscanf("ds", other);
- data = result2[0] ? true : false;
- packet = result2[1];
- exit = true;
- break;
- default:
- break;
- }
- }
- else
- {
- exit = true;
- }
- }while(!exit);
- local table ={ data = data, text = packet };
- return table;
- }
- function strrep(text, fromChar, toChar)
- {
- local i = 0;
- local last = 0;
- local newText = "";
- do
- {
- i = text.find(fromChar, i + 1);
- if(i)
- {
- if(newText == ""){ newText += text.slice(last, i);}
- else { newText += toChar + text.slice(last, i);}
- last = i+1;
- }
- else
- {
- if(newText == ""){ newText += text.slice(last);}
- else { newText += toChar + text.slice(last);}
- }
- }while(i)
- return newText;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement