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"; print "Adding session ".$newSession." to database\n";
$sessions{$newSession} = { $sessions{$newSession} = {
"id" => $newSession, "id" => $newSession,
"connections" => {},
"users" => {}, "users" => {},
"decks" => {}, "decks" => {},
"pools" => {}, "pools" => {},
@ -259,6 +260,19 @@ sub getDeckSize {
my $origin = 'ws://localhost'; my $origin = 'ws://localhost';
sub joinSession { 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( my $server = Net::WebSocket::Server->new(
@ -272,16 +286,28 @@ my $server = Net::WebSocket::Server->new(
}, },
ready => sub { ready => sub {
my ($conn) = @_; my ($conn) = @_;
#strip the / off of the resource request and then assign just the request to $session $conn->send_utf8('{"request":"user"}');
#Check for game ID, if none generate one and send it then disconnect. $conn->send_utf8('{"request":"session"}');
#Check for user ID, if none $conn->disconnect("noid",generateUser());
}, },
utf8 => sub { utf8 => sub {
my ($conn, $msg) = @_; my ($conn, $msg) = @_;
my $sessionID = $conn->{"currentSession"}{"id"}; my $sessionID = $conn->{"currentSession"}{"id"};
my $messageData = ""; my $messageData = "";
eval { $messageData = from_json($msg) }; 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 { disconnect => sub {
my ($conn, $code, $reason) = @_; my ($conn, $code, $reason) = @_;