R3C0NF16UR3D

networkdriver.lua

Jul 31st, 2023
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.23 KB | None | 0 0
  1. local component = require("component")
  2. local gpu = component.gpu
  3. local event = require("event")
  4. local modem = component.modem
  5. local wm = require("windowmanager/libs/wm")
  6. local gui = require("windowmanager/libs/guiElements")
  7.  
  8. local ScreenWidth, ScreenHeight = gpu.getResolution()
  9.  
  10.  
  11. local networkdriver = {}
  12.  
  13. local messagePort
  14. local internalPort
  15.  
  16. local version = "1.0"
  17.  
  18. local portList = {
  19. ["printserver"] = 9100,
  20. ["message"] = 4662,
  21. ["internal"] = 148,
  22. }
  23.  
  24. local userList = {}
  25.  
  26.  
  27. local function displayMessageWindow(sender, message)
  28. local windowWidth = 40
  29. local windowHeight = 10
  30.  
  31. local window = wm.newWindow(math.floor(ScreenWidth/2) - math.floor(windowWidth/2), math.floor(ScreenHeight/2) - math.floor(windowHeight/2), windowWidth, windowHeight, "Message")
  32. wm.disableWindowButtons(window, true)
  33. wm.setWindowSticky(window, true)
  34.  
  35. wm.addElement(window, gui.newLabel(2, 2, windowWidth - 4, 1, "Sender: " .. sender))
  36. wm.addElement(window, gui.newLine(1, 3, windowWidth - 4))
  37. msgLabel = gui.newLabel(2, 4, windowWidth - 4, 4, message)
  38. gui.setElementAutoWordWrap(msgLabel, true)
  39. wm.addElement(window, msgLabel)
  40. wm.addElement(window, gui.newLine(1, 8, windowWidth - 4))
  41.  
  42. local CloseButton = gui.newButton(math.floor(windowWidth/2) - 3, windowHeight - 1, 7, 1, "close", function() wm.closeWindow(window) end)
  43. wm.addElement(window, CloseButton)
  44.  
  45. wm.raiseWindow(window)
  46.  
  47. end
  48.  
  49.  
  50. local modemPacketsSend = 0
  51. local modemPacketsReceive = 0
  52. local modemPacketsSendSize = 0
  53. local modemPacketsReceiveSize = 0
  54.  
  55. function networkdriver.modemSend(addr, port, ...)
  56. local message = { ... }
  57. for i = 1, #message do
  58. if type(message[i]) == "boolean" or type(message[i]) == "nil" then
  59. modemPacketsSendSize = modemPacketsSendSize + 6
  60. end
  61. if type(message[i]) == "string" then
  62. modemPacketsSendSize = modemPacketsSendSize + string.len(message[i]) + 2
  63. end
  64. if type(message[i]) == "number" then
  65. modemPacketsSendSize = modemPacketsSendSize + 10
  66. end
  67. end
  68. modemPacketsSend = modemPacketsSend + 1
  69. modem.send(addr, port, ...)
  70. end
  71.  
  72. function networkdriver.modemBroadcast(port, ...)
  73. local message = { ... }
  74. for i = 1, #message do
  75. if type(message[i]) == "boolean" or type(message[i]) == "nil" then
  76. modemPacketsSendSize = modemPacketsSendSize + 6
  77. end
  78. if type(message[i]) == "string" then
  79. modemPacketsSendSize = modemPacketsSendSize + string.len(message[i]) + 2
  80. end
  81. if type(message[i]) == "number" then
  82. modemPacketsSendSize = modemPacketsSendSize + 10
  83. end
  84. end
  85. modemPacketsSend = modemPacketsSend + 1
  86. modem.broadcast(port, ... )
  87. end
  88.  
  89. local function modemReceiveCallback(_, _, from, port, distance, ...)
  90. local message = { ... }
  91. for i = 1, #message do
  92. if type(message[i]) == "boolean" or type(message[i]) == "nil" then
  93. modemPacketsReceiveSize = modemPacketsReceiveSize + 6
  94. end
  95. if type(message[i]) == "string" then
  96. modemPacketsReceiveSize = modemPacketsReceiveSize + string.len(message[i]) + 2
  97. end
  98. if type(message[i]) == "number" then
  99. modemPacketsReceiveSize = modemPacketsReceiveSize + 10
  100. end
  101. end
  102. modemPacketsReceive = modemPacketsReceive + 1
  103.  
  104. if port == messagePort then
  105. if message[2] then
  106. displayMessageWindow(message[2], message[1])
  107. else
  108. displayMessageWindow(from, message[1])
  109. end
  110. end
  111.  
  112.  
  113. if port == internalPort then
  114. if message[1] == "PING" then
  115. networkdriver.modemSend(from, internalPort, "PONG")
  116. end
  117. if message[1] == "GET USER" then
  118. networkdriver.modemSend(from, internalPort, "GIVE USER", wm.getUsername())
  119. end
  120. if message[1] == "GIVE USER" then
  121. local tmpTable = {}
  122. tmpTable.user = message[2]
  123. tmpTable.addr = from
  124. --[[
  125. for i = 1, #userList do
  126. if userList[i] == message[2] then
  127. num = i
  128. break
  129. end
  130. end
  131. table.remove(userList, num)
  132. ]]--
  133. table.insert(userList, tmpTable)
  134. end
  135. end
  136. end
  137.  
  138. function networkdriver.broadcastMessage(message)
  139. networkdriver.modemBroadcast(messagePort, message)
  140. end
  141.  
  142.  
  143. function networkdriver.getModemPackets()
  144. return modemPacketsSend, modemPacketsReceive, modemPacketsSendSize, modemPacketsReceiveSize
  145. end
  146.  
  147. function networkdriver.getPort(service)
  148. for key, value in pairs(portList) do
  149. if key == service then
  150. return value
  151. end
  152. end
  153. end
  154.  
  155. function networkdriver.openPort(service)
  156. for key, value in pairs(portList) do
  157. if key == service then
  158. if component.isAvailable("modem") == true then
  159. local modemPort = value
  160. modem = component.modem
  161. return modem.open(modemPort), value
  162. end
  163. end
  164. end
  165. return false
  166. end
  167.  
  168. function networkdriver.clearUserList()
  169. userList = {}
  170. end
  171.  
  172. function networkdriver.getUserList()
  173. return userList
  174. end
  175.  
  176.  
  177. function networkdriver.start()
  178. _, messagePort = networkdriver.openPort("message")
  179. _, internalPort = networkdriver.openPort("internal")
  180. wm.registerDriver("network", "A driver for modems that collects traffic usage informations", "S.Kempa", version)
  181. event.listen("modem_message", modemReceiveCallback)
  182. end
  183.  
  184. function networkdriver.stop()
  185. event.ignore("modem_message", modemReceiveCallback)
  186. end
  187.  
  188. return networkdriver
Advertisement
Add Comment
Please, Sign In to add comment