Advertisement
sodapoppanda

godot http server

Mar 20th, 2023
1,089
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.31 KB | None | 0 0
  1. extends Node2D
  2.  
  3. var server = TCPServer.new()
  4. var bind_address = "127.0.0.1"
  5. var port = 3040 #39763
  6. var backup_port = 67634
  7.  
  8. func try_start_server(err: int, attempt: int):
  9.     match err:
  10.         # code 0 no errors server listening
  11.         0:
  12.             if(attempt == 0):
  13.                 print("Server listening on http://%s:%s" % [bind_address, port])
  14.             else:
  15.                 print("Server listening on http://%s:%s" % [bind_address, backup_port])
  16.             return
  17.         # err | failed to bind to port
  18.         _:
  19.             if(attempt == 0):
  20.                 print('error: starting http server on %s FAILED'  % [port])
  21.                 var new_err: int = server.listen(port, bind_address)
  22.                 try_start_server(new_err, 1)
  23.             else:
  24.                 print('error: starting http server on %s FAILED' % [backup_port])
  25.             server.stop()
  26.             return
  27.  
  28.  
  29. func _ready():
  30.     set_process(true)
  31.     var err: int = server.listen(port, bind_address)
  32.     try_start_server(err, 0)
  33. # handle connection
  34. func _process(delta):
  35.     if server.is_connection_available():
  36.         var peer = server.take_connection()
  37.         var status = peer.get_status()
  38.         print("Got peer: ", peer.get_connected_host(), ":", peer.get_connected_port())
  39.         handler(peer)
  40.  
  41.  
  42. func handler(peer: StreamPeerTCP):
  43.  
  44.     var available_bytes := peer.get_available_bytes()
  45.     if available_bytes == 0:
  46.         print('delay')
  47.         OS.delay_msec(100)
  48.  
  49.     var arr := peer.get_data(available_bytes)
  50.     if arr[0] != OK:
  51.         print_debug("Failed to get data (error ", arr[0], ")")
  52.         return false
  53.     var content = arr[1]
  54.     var requestContent = PackedByteArray(content).get_string_from_ascii()
  55.     var req_headers = requestContent.split('\r\n\r\n')[0].split('\r\n')
  56.     var req_body = requestContent.split('\r\n\r\n')[0]
  57.    
  58.     var auth_ref_code
  59.     for header in req_headers:
  60.         if(header.contains('auth_ref_code:')):
  61.             auth_ref_code = header.replace('auth_ref_code: ', '')
  62.             print(auth_ref_code)
  63.         else:
  64.             print(':( no auth ref code provided')
  65.    
  66.     var response_content = "HTTP/1.1 200 OK\r\n"
  67.     response_content += "Connection: Keep-Alive\r\n"
  68.     response_content += "Host: Godot\r\n"
  69.     response_content += "Content-Type: text/html; charset=utf-8\r\n"
  70.     response_content += "Content-Length: {LGTH}\r\n\r\n"
  71.     var body = "Hello World! From Godot\r\n"
  72.    
  73.     var res_length =body.length()
  74.     response_content = response_content.replace('{LGTH}', str(res_length))
  75.     response_content += body
  76.     peer.put_data(response_content.to_ascii_buffer())
  77.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement