core.lua 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. local Net = class()
  2. function Net:init()
  3. self.inStream = lib.trickle.create()
  4. self.outStream = lib.trickle.create()
  5. end
  6. function Net:listen(port)
  7. self.host = enet.host_create(port and '*:' .. port or nil, 16, 2)
  8. if not self.host then error('Error creating the connection') end
  9. --self.host:compress_with_range_coder()
  10. end
  11. function Net:connectTo(ip, port)
  12. if not self.host then self:listen() end
  13. local peer = self.host:connect(ip .. ':' .. port, 2)
  14. peer:timeout(0, 0, 3000)
  15. end
  16. function Net:update()
  17. while true do
  18. if not self.host then break end
  19. local event = self.host:service()
  20. if not event then break end
  21. if event.type == 'receive' then
  22. self.inStream:clear()
  23. self.inStream.str = event.data
  24. repeat
  25. event.msg, event.data = self:unpack()
  26. ;(self.receive[event.msg] or self.receive.default)(self, event)
  27. until not event.msg
  28. else
  29. f.exe(self[event.type], self, event)
  30. end
  31. end
  32. end
  33. function Net:pack(msg, data)
  34. self.outStream:write(msg, '5bits')
  35. self.outStream:pack(data, self.signatures[msg])
  36. end
  37. function Net:unpack()
  38. local msg = self.inStream:read('5bits')
  39. if not self.other.signatures[msg] then return false end
  40. return msg, self.inStream:unpack(self.other.signatures[msg])
  41. end
  42. return Net