From c6944c8667fc94723d8a92eee4a0a90e5b95a2cf Mon Sep 17 00:00:00 2001 From: bluesaxman Date: Wed, 9 Sep 2020 10:42:27 -0600 Subject: [PATCH] Added initial connection negotiation logic to server --- Server/server.pl | 34 ++++++++++++++++++++++++++++++---- 1 file changed, 30 insertions(+), 4 deletions(-) diff --git a/Server/server.pl b/Server/server.pl index b17e58a..e0ae416 100755 --- a/Server/server.pl +++ b/Server/server.pl @@ -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) = @_;