Advertisement
Guest User

Untitled

a guest
Jun 20th, 2013
28
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 5.62 KB | None | 0 0
  1. -- This example is largely based on the ones from (at least 90% not mine)
  2. -- lua-enet ( http://leafo.net/lua-enet/ )
  3. -- and love-enet ( https://bitbucket.org/MartinFelis/love-enet )
  4. -- especially: love-enet-example ( https://bitbucket.org/MartinFelis/love-enet-example )
  5.  
  6. require("love.enet")
  7.  
  8. local mode = "server"
  9. local client = {}
  10. local server = {}
  11. local address = "localhost:6789"
  12.  
  13. function love.load(args)
  14.         if #args > 1 then mode = args[2] end
  15.         print("Mode: '" .. mode .. "'")
  16.  
  17.         if mode == "server" then
  18.                 print ("Server: listening...")
  19.                
  20.                 local errorMessage
  21.                 server.host, errorMessage = love.enet.newHost(address)
  22.                
  23.                 if server.host == nil then
  24.                         print("Error!: " .. errorMessage)
  25.                 end
  26.                
  27.                 client = nil
  28.         elseif mode == "client" then
  29.                 print ("Client: connecting to server: " .. address)
  30.                 client.host, errorMessage = love.enet.newHost()
  31.                
  32.                 if client.host == nil then
  33.                         print("Error!: " .. errorMessage)
  34.                 end
  35.                
  36.                 client.host:connect(address)
  37.                
  38.                 client.counter = 0
  39.                 client.peer = false
  40.                 client.connectTimestamp = 0
  41.                 client.duration = 10
  42.                 client.lastMessageTimestamp = 0
  43.                
  44.                 server = nil
  45.         else
  46.                 print("You're a horrible person.")
  47.         end
  48. end
  49.  
  50. function serverListPeers()
  51.         if server.host:getPeerCount() <= 0 then
  52.                 return
  53.         end
  54.  
  55.         print("list of peers:")
  56.  
  57.         local i = 1
  58.         while i < server.host:getPeerCount() + 1 do
  59.                 local p = server.host:getPeer(i)
  60.                 print("\t" .. i .. ": " .. tostring(p) .. " state: " .. p:getState() .. " connectID: " .. tostring (p:getConnectId()))
  61.                 i = i + 1
  62.         end
  63. end
  64.  
  65. local serverPeer = {}
  66.  
  67. function serverUpdate ()
  68.         local event = server.host:service(0)
  69.  
  70.         while event ~= nil do
  71.                 if event.type == "receive" then
  72.                         print("Server: got message: ", event.data, event.peer)
  73.                         event.peer:send(event.data)
  74.                         local limit, minimum, maximum = event.peer:setTimeout(5, 800, 1200);
  75.                 elseif event.type == "connect" then
  76.                         print("Server: got a new connection (peer count = " .. server.host:getPeerCount() .. "). Peer index = " .. event.peer:getIndex())
  77.                         serverListPeers()
  78.                         serverPeer = event.peer
  79.                 elseif event.type == "disconnect" then
  80.                         print("Server: lost connection to peer: " .. tostring(event.peer) .. " (peer count = " .. server.host:getPeerCount() .. ")")
  81.                 else
  82.                         print("Event type unknown: '"..event.type.."'")
  83.                 end
  84.  
  85.                 event = server.host:service(0)
  86.         end
  87. end
  88.  
  89. function clientUpdate (dt)
  90.         local event = client.host:service(0)
  91.  
  92.         while event ~= nil do
  93.                 if event.type == "connect" then
  94.                         print("Client: connected to: " .. tostring(event.peer))
  95.                         client.peer = event.peer
  96.                         client.connectTimestamp = love.timer.getTime()
  97.        
  98.                         event.peer:send("Hello server")
  99.                         client.lastMessageTimestamp = love.timer.getTime()
  100.        
  101.                         print("Client: initializing ping interval   = " .. event.peer:setPingInterval (500))
  102.                         print("Client: Initializing round trip time = " .. client.peer:getRoundTripTime (50))
  103.  
  104.                         local limit, minimum, maximum = client.peer:setTimeout(16, 1000, 1500);
  105.                 elseif event.type == "disconnect" then
  106.                         print("Client: Disconnected from Server!")
  107.                         love.event.push("quit")
  108.                 elseif event.type == "receive" then
  109.                         print("Client: received message: ", event.data, event.peer)
  110.                         client.counter = client.counter + 1
  111.                 else
  112.                         print("Event type unknown: '"..event.type.."'")
  113.                 end
  114.  
  115.                 event = client.host:service(0)
  116.         end
  117.  
  118.         if client.connectTimestamp - love.timer.getTime() + client.duration < 0 then
  119.                 print ("Client: Exiting!")
  120.                 print ("Client: In/Out: " .. client.host:getTotalReceivedData() .. "/" .. client.host:getTotalSentData())
  121.                 client.peer:disconnect()
  122.                 client.host:service(100)
  123.                 client.peer = false
  124.                 love.event.push("quit")
  125.         end
  126.  
  127.         -- actions that are done every second
  128.         if client.peer and math.floor (love.timer.getTime() - client.lastMessageTimestamp) > 0 then
  129.                 client.lastMessageTimestamp = love.timer.getTime()
  130.                 client.peer:send("Packet " .. tostring (client.counter))
  131.                 print ("rtt = " .. tostring(client.peer:getRoundTripTime()))
  132.         end
  133. end
  134.  
  135. function love.update(dt)
  136.         if server then
  137.                 serverUpdate(dt)
  138.         end
  139.  
  140.         if client then
  141.                 clientUpdate(dt)
  142.         end
  143. end
  144.  
  145. function love.keypressed(key, code)
  146.         print ("got key: " .. key)
  147.  
  148.         if (key == "escape") then
  149.                 love.event.push("quit")
  150.         end
  151. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement