Advertisement
Guest User

Packets

a guest
Mar 27th, 2016
244
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.20 KB | None | 0 0
  1. function convertToPacket(data)
  2. {
  3.     local packet = "";
  4.     switch(typeof(data))
  5.     {
  6.     case "array": packet += convertArrayToPacket(data); break;
  7.     case "table": packet += convertTabToPacket(data); break;
  8.     case "string": packet += format(" S %s", strrep(data, " ", "*"));break;
  9.     case "integer": packet += format(" I %s", data.tostring()); break;
  10.     case "float": packet += format(" F %s", data.tostring()); break;
  11.     case "bool": packet += format(" B %s", data ? "1" : "0"); break;
  12.     case "instance": packet += convertTabToPacket(data.toPacket()); break;
  13.     }
  14.     return packet;
  15. }
  16.  
  17. function convertArrayToPacket(data)
  18. {
  19.     local packet = " AS";
  20.     for(local i = 0; i < data.len(); i++)
  21.     {
  22.         packet += format(" AN %s", convertToPacket(data[i]));
  23.     }
  24.     packet += " AE";
  25.     return packet;
  26. }
  27.  
  28. function convertTabToPacket(data)
  29. {
  30.     local packet = " TS";
  31.     foreach(key, item in data)
  32.     {
  33.         packet += format(" SLOT %s %s", key.tostring(), convertToPacket(item));
  34.     }
  35.     packet += " TE";
  36.     return packet;
  37. }
  38.  
  39. function receiveFromPacket(packet)
  40. {
  41.     packet += " END";
  42.     local dane = convertPacket(packet);
  43.     return dane.data;
  44. }
  45.  
  46. function convertPacket(packet)
  47. {
  48.     local data;
  49.     packet = lstrip(packet);
  50.     local exit = false;
  51.     do
  52.     {
  53.         local result = sscanf("ss", packet);
  54.         if(result)
  55.         {
  56.             local word = result[0];
  57.             local other = result[1];
  58.            
  59.             switch(word)
  60.             {
  61.             //array
  62.             case "AS":
  63.                 data = [];
  64.                 packet = other;
  65.                 break;
  66.             case "AN":
  67.                 local result2 = convertPacket(other);
  68.                 data.push(result2.data);
  69.                 packet = result2.text;
  70.                 break;
  71.             case "AE":
  72.                 exit = true;
  73.                 packet = other;
  74.                 break;
  75.            
  76.             //table
  77.             case "TS":
  78.                 data = {};
  79.                 packet = other;
  80.                 break;
  81.             case "TE":
  82.                 exit = true;
  83.                 packet = other;
  84.                 break;
  85.             case "SLOT":
  86.                 local result2 = sscanf("ss", other)
  87.                 local slotName = result2[0];
  88.                 local result3 = convertPacket(result2[1]);
  89.                 try{ slotName = slotName.tointeger()} catch(error){ }
  90.                 data[slotName] <- result3.data;
  91.                 packet = result3.text;
  92.                 break;
  93.            
  94.             //Zwykłe zmienne
  95.             case "S":
  96.                 local result2 = sscanf("ss", other);
  97.                 data = strrep(result2[0], "*", " ")
  98.                 packet = result2[1];
  99.                 exit = true;
  100.                 break;
  101.             case "I":              
  102.                 local result2 = sscanf("ds", other);
  103.                 data = result2[0]
  104.                 packet = result2[1];
  105.                 exit = true;
  106.                 break;
  107.             case "F":  
  108.                 local result2 = sscanf("fs", other);
  109.                 data = result2[0]
  110.                 packet = result2[1];
  111.                 exit = true;
  112.                 break;
  113.             case "B":  
  114.                 local result2 = sscanf("ds", other);
  115.                 data = result2[0] ? true : false;
  116.                 packet = result2[1];
  117.                 exit = true;
  118.                 break;
  119.             default:
  120.                 break;
  121.             }
  122.         }
  123.         else
  124.         {
  125.             exit = true;
  126.         }
  127.     }while(!exit);
  128.    
  129.     local table ={ data = data, text = packet };
  130.     return table;
  131. }
  132.  
  133. function strrep(text, fromChar, toChar)
  134. {
  135.     local i = 0;
  136.     local last = 0;
  137.     local newText = "";
  138.     do
  139.     {
  140.         i = text.find(fromChar, i + 1);
  141.         if(i)
  142.         {
  143.             if(newText == ""){ newText += text.slice(last, i);}
  144.             else { newText += toChar + text.slice(last, i);}
  145.             last = i+1;
  146.         }
  147.         else
  148.         {
  149.             if(newText == ""){ newText += text.slice(last);}
  150.             else { newText += toChar + text.slice(last);}
  151.         }
  152.     }while(i)
  153.  
  154.     return newText;
  155. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement