kaibochan

Network.lua

Mar 10th, 2025 (edited)
245
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 1.33 KB | None | 0 0
  1. local Network = {}
  2.  
  3. function Network.toUnixTime(date_table)
  4.     local sec_per_day = 24 * 60 * 60
  5.     local sec_per_year = 365 * sec_per_day
  6.     local unix_time =
  7.         sec_per_year * (date_table.year - 1970)
  8.         + sec_per_day * (date_table.yday - 1)
  9.         + date_table.hour * 60 * 60
  10.         + date_table.min * 60
  11.         + date_table.sec
  12.  
  13.     return unix_time
  14. end
  15.  
  16. Network.Message = {
  17.     timestamp = 0,
  18.     from = nil,
  19.     text = "",
  20.     protocol = nil,
  21. }
  22.  
  23. function Network.Message:new(o)
  24.     o = o or {}
  25.  
  26.     setmetatable(o, self)
  27.     self.__index = self
  28.  
  29.     return o
  30. end
  31.  
  32. Network.Socket = {
  33.     protocol = nil,
  34.     timeout = nil,
  35.  
  36.     received = nil,
  37.     callback = nil,
  38.  
  39.     listen = nil
  40. }
  41.  
  42. function Network.Socket:new(o)
  43.     o = o or {}
  44.  
  45.    
  46.     setmetatable(o, self)
  47.     self.__index = self
  48.    
  49.     o.received = {}
  50.     o.listen = function()
  51.         local rednet_data = {rednet.receive(o.protocol, o.timeout)}
  52.         if not rednet_data then
  53.             return
  54.         end
  55.  
  56.         table.insert(o.received, 1, Network.Message:new {
  57.             timestamp = Network.toUnixTime(os.date("!*t")),
  58.             from = rednet_data[1],
  59.             text = rednet_data[2],
  60.             protocol = rednet_data[3],
  61.         })
  62.  
  63.         o.callback(o)
  64.     end
  65.  
  66.     return o
  67. end
  68.  
  69. return Network
Advertisement
Add Comment
Please, Sign In to add comment