56 lines
1.1 KiB
GDScript
56 lines
1.1 KiB
GDScript
extends PacketHandler
|
|
|
|
enum {
|
|
SUCCESS = 0,
|
|
FAIL = 1,
|
|
}
|
|
|
|
var accounts := {
|
|
"user1": Account.new("password"),
|
|
"user2": Account.new("password"),
|
|
}
|
|
|
|
func _ready():
|
|
%Server.set_handler(Packet.LOGIN, self)
|
|
|
|
func handle_packet(data: PackedByteArray, peer: PacketPeer):
|
|
var client = %Server.peer_to_client(peer)
|
|
|
|
if client.is_logged_in():
|
|
return
|
|
|
|
var data_string = data.get_string_from_utf8()
|
|
var login_request = JSON.parse_string(data_string)
|
|
|
|
if login_request.size() < 2:
|
|
fail_login(peer)
|
|
return
|
|
|
|
var username = login_request[0]
|
|
var password = login_request[1]
|
|
|
|
if !accounts.has(username):
|
|
fail_login(peer)
|
|
return
|
|
|
|
if accounts[username].password != password:
|
|
fail_login(peer)
|
|
return
|
|
|
|
client.auth_token = generate_auth_token()
|
|
|
|
var buffer := StreamPeerBuffer.new()
|
|
buffer.put_8(Packet.LOGIN)
|
|
buffer.put_8(SUCCESS)
|
|
buffer.put_data(client.auth_token.to_ascii_buffer())
|
|
peer.put_packet(buffer.data_array)
|
|
|
|
func fail_login(peer: PacketPeer):
|
|
var buffer := StreamPeerBuffer.new()
|
|
buffer.put_8(Packet.LOGIN)
|
|
buffer.put_8(FAIL)
|
|
peer.put_packet(buffer.data_array)
|
|
|
|
func generate_auth_token() -> String:
|
|
return "secret"
|