Hiranus

NetColorSlave

Jun 17th, 2019
195
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 2.73 KB | None | 0 0
  1. os.loadAPI("ColorManagement");
  2. os.loadAPI("JsonSaveLoad");
  3. os.loadAPI("Receive");
  4.  
  5.  
  6. local ConfigurationFile = "Configuration.json";
  7. local SettingsFile = "Settings.json";
  8. local Configuration = {};
  9. local Settings = {};
  10. local ColorManager = nil;
  11.  
  12. local function SendConfiguration(masterId)
  13.   rednet.send(masterId,{Task = "SendingConfiguration",Data = Configuration},Settings.SendProtocol);
  14. end
  15.  
  16. local function ReceiveLoop()
  17.   Receive.ReceiveLoop(Settings.ReceiveProtocol);
  18. end
  19.  
  20. local function FindMatchingConfigurations(fingerprint)
  21.   local tmptab = {};
  22.   for i=1,#Configuration do
  23.     local configFingerprint = Configuration[i].ItemDetail.Fingerprint;
  24.     if configFingerprint.id == fingerprint.id and configFingerprint.dmg == fingerprint.dmg and configFingerprint.nbt_hash == fingerprint.nbt_hash then
  25.       tmptab[#tmptab + 1] = Configuration[i];
  26.     end
  27.   end
  28.   return tmptab;
  29. end
  30.  
  31. function ExecuteMasterData()
  32.   while true do
  33.     local recievedTasks = Receive.GetReceivedData();
  34.     print("Processing requests");
  35.     for i=1,#recievedTasks do
  36.       local recievedTask = recievedTasks[i];
  37.       local message = recievedTask.Message;
  38.       local sender = recievedTask.Sender;
  39.  
  40.       if message.Task == "RequestConfiguration" then
  41.         print("Sending configuration to "..sender);
  42.         SendConfiguration(sender)
  43.       elseif message.Task == "UpdateOutputState" then
  44.         print("Updating output state");
  45.         local mathcingConfigurations = FindMatchingConfigurations(message.Data.Fingerprint)
  46.         for i=1,#mathcingConfigurations do
  47.           local newState= message.Data.NewState;
  48.           print("Recieved new state for color "..mathcingConfigurations[i].ColorId..": ".. tostring(newState));
  49.           if mathcingConfigurations[i].InvertSignal then
  50.             print("Inverting recieved signal, as requested by configuration");
  51.             newState = not newState;
  52.           end
  53.           print("New state of color "..mathcingConfigurations[i].ColorId.." is ".. tostring(newState));
  54.           if newState then
  55.             ColorManager.AddColor(mathcingConfigurations[i].ColorId);
  56.           else
  57.             ColorManager.RemoveColor(mathcingConfigurations[i].ColorId);
  58.           end
  59.         end
  60.       end
  61.     end
  62.     repeat
  63.       local type,sender,data,protocol = os.pullEvent("rednet_message")
  64.     until protocol == Settings.ReceiveProtocol
  65.   end
  66. end
  67.  
  68.  
  69. Configuration = JsonSaveLoad.Load(ConfigurationFile);
  70. Settings = JsonSaveLoad.Load(SettingsFile);
  71. rednet.open(Settings.ModemDirection);
  72. rednet.broadcast({Task = "SendingConfiguration",Data = Configuration},Settings.SendProtocol);
  73. ColorManager = ColorManagement.InitalizeColors(Settings.BundledColorCable);
  74. parallel.waitForAll(ReceiveLoop,ExecuteMasterData);
Advertisement
Add Comment
Please, Sign In to add comment