Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- extends Node2D
- var server = TCPServer.new()
- var bind_address = "127.0.0.1"
- var port = 3040 #39763
- var backup_port = 67634
- func try_start_server(err: int, attempt: int):
- match err:
- # code 0 no errors server listening
- 0:
- if(attempt == 0):
- print("Server listening on http://%s:%s" % [bind_address, port])
- else:
- print("Server listening on http://%s:%s" % [bind_address, backup_port])
- return
- # err | failed to bind to port
- _:
- if(attempt == 0):
- print('error: starting http server on %s FAILED' % [port])
- var new_err: int = server.listen(port, bind_address)
- try_start_server(new_err, 1)
- else:
- print('error: starting http server on %s FAILED' % [backup_port])
- server.stop()
- return
- func _ready():
- set_process(true)
- var err: int = server.listen(port, bind_address)
- try_start_server(err, 0)
- # handle connection
- func _process(delta):
- if server.is_connection_available():
- var peer = server.take_connection()
- var status = peer.get_status()
- print("Got peer: ", peer.get_connected_host(), ":", peer.get_connected_port())
- handler(peer)
- func handler(peer: StreamPeerTCP):
- var available_bytes := peer.get_available_bytes()
- if available_bytes == 0:
- print('delay')
- OS.delay_msec(100)
- var arr := peer.get_data(available_bytes)
- if arr[0] != OK:
- print_debug("Failed to get data (error ", arr[0], ")")
- return false
- var content = arr[1]
- var requestContent = PackedByteArray(content).get_string_from_ascii()
- var req_headers = requestContent.split('\r\n\r\n')[0].split('\r\n')
- var req_body = requestContent.split('\r\n\r\n')[0]
- var auth_ref_code
- for header in req_headers:
- if(header.contains('auth_ref_code:')):
- auth_ref_code = header.replace('auth_ref_code: ', '')
- print(auth_ref_code)
- else:
- print(':( no auth ref code provided')
- var response_content = "HTTP/1.1 200 OK\r\n"
- response_content += "Connection: Keep-Alive\r\n"
- response_content += "Host: Godot\r\n"
- response_content += "Content-Type: text/html; charset=utf-8\r\n"
- response_content += "Content-Length: {LGTH}\r\n\r\n"
- var body = "Hello World! From Godot\r\n"
- var res_length =body.length()
- response_content = response_content.replace('{LGTH}', str(res_length))
- response_content += body
- peer.put_data(response_content.to_ascii_buffer())
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement