Added initial connection negotiation logic to server

This commit is contained in:
bluesaxman 2020-09-09 10:42:27 -06:00
parent 93596ab81a
commit c6944c8667

View File

@ -20,6 +20,7 @@ sub generateSession {
print "Adding session ".$newSession." to database\n";
$sessions{$newSession} = {
"id" => $newSession,
"connections" => {},
"users" => {},
"decks" => {},
"pools" => {},
@ -259,6 +260,19 @@ sub getDeckSize {
my $origin = 'ws://localhost';
sub joinSession {
my ($sessionID, $userID) = @_;
unless (defined($sessions{$sessionID})) {
print $sessionID." does not exsist, attempting to create...\n";
if (generateSession($sessionID)) {
print "Session ".$sessionID." has been created.\n";
} else {
print "ERROR: Could not create session ".$sessionID."\n";
return 0;
}
}
addUser($sessionID,$userID);
return 1;
}
my $server = Net::WebSocket::Server->new(
@ -272,16 +286,28 @@ my $server = Net::WebSocket::Server->new(
},
ready => sub {
my ($conn) = @_;
#strip the / off of the resource request and then assign just the request to $session
#Check for game ID, if none generate one and send it then disconnect.
#Check for user ID, if none $conn->disconnect("noid",generateUser());
$conn->send_utf8('{"request":"user"}');
$conn->send_utf8('{"request":"session"}');
},
utf8 => sub {
my ($conn, $msg) = @_;
my $sessionID = $conn->{"currentSession"}{"id"};
my $messageData = "";
eval { $messageData = from_json($msg) };
if ($@) { $conn->send_utf8('{"error":1, "message":"ERROR: Invalid json"}'); return 0;}
if ($@) { $conn->send_utf8('{"error":100, "message":"ERROR: Invalid json"}'); return 0;}
if (defined($messageData->{user})) {
$conn->{user} = $messageData->{user};
$conn->send_utf8('{"info":"user success"}');
}
if (defined($messageData->{session})) {
unless(defined($conn->{user})) { $conn->send_utf8('{"error":200, "message":Could not join session, no user defined", "request":"user"}'); $conn->send_utf8('{"request":"session"}'); return 0; }
$conn->{session} = $messageData->{session};
$conn->send_utf8('{"info":"session success", "request":"join"}');
}
if (defined($messageData->{action})) {
if ("join" == $messageData->{action}) { if (joinSession($conn->{session},$conn->{user})) { $conn->send_utf8('{"info":"join success"}'); } }
}
},
disconnect => sub {
my ($conn, $code, $reason) = @_;