large logic rework for smooth game setup, and error handling

This commit is contained in:
2020-10-01 00:29:59 +00:00
parent 3b88dba9a2
commit f4ea9f57c6
2 changed files with 77 additions and 45 deletions

View File

@@ -272,18 +272,28 @@ sub normalizeSession {
my $origin = 'ws://test.murkfall.net';
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";
my $conn = shift;
unless (defined($conn->{session})) {
$conn->{session} = generateSession();
$conn->send_utf8('{"session":"'.$conn->{session}.'"}');
return 0;
}
unless (defined($sessions{$conn->{session}})) {
print $conn->{session}." does not exsist, attempting to create...\n";
if (my $genSession = generateSession($conn->{session})) {
if ( $genSession == $conn->{session} ) {
print "Session ".$conn->{session}." has been created.\n";
} else {
print "ERROR: issues with creating session ".$conn->{session}."\n";
print "Session ".$genSession." used instead\n";
$conn->{session} = $genSession;
}
} else {
print "ERROR: Could not create session ".$sessionID."\n";
print "ERROR: Could not create session ".$conn->{session}."\n";
return 0;
}
}
unless (addUser($sessionID,$userID)) {
unless (addUser($conn->{session},$conn->{user})) {
#assume rejoining user
}
return 1;
@@ -310,8 +320,7 @@ my $server = Net::WebSocket::Server->new(
},
ready => sub {
my ($conn) = @_;
$conn->send_utf8('{"request":"user"}');
$conn->send_utf8('{"request":"session"}');
$conn->send_utf8('{"request":"join"}');
},
utf8 => sub {
my ($conn, $msg) = @_;
@@ -320,20 +329,27 @@ my $server = Net::WebSocket::Server->new(
eval { $messageData = from_json($msg) };
if ($@) { $conn->send_utf8('{"error":100, "message":"ERROR: Invalid json"}'); return 0;}
if (defined($messageData->{user})) {
if ( grep( /^user$/, keys(%$messageData)) ) {
$conn->{user} = $messageData->{user};
# Need to check if userID is unique
$conn->send_utf8('{"info":"user success"}');
$conn->send_utf8('{"info":"user success","request":"join"}');
}
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 ( grep( /^session$/, keys(%$messageData)) ) {
if (defined($messageData->{session})) {
$conn->{session} = $messageData->{session};
$conn->send_utf8('{"info":"session success", "request":"join"}');
} else {
$conn->{session} = generateSession();
$conn->send_utf8('{"session":"'.$conn->{session}.'"}');
$conn->disconnect(4101,"Closed in anticipation of rejoin with new session");
}
}
if (defined($messageData->{action})) {
if ($messageData->{action} =~ /join/ ) {
if (joinSession($conn->{session},$conn->{user})) { $conn->send_utf8('{"info":"join success", "request":"update"}');
} else { $conn->send_utf8('{"error":201,"message":"could not create session","request":"session"}') } }
unless ( grep( /^session$/, %$conn) ) { $conn->send_utf8('{"request":"session"}'); return 1; }
unless ( grep( /^user$/, %$conn) ) { $conn->send_utf8('{"request":"user"}'); return 1; }
if (joinSession($conn)) { $conn->send_utf8('{"info":"join success", "request":"update"}');
} else { $conn->send_utf8('{"error":201,"message":"could not create session","request":"close"}') } }
if ($messageData->{action} =~ /update/ ) { my $sessionID = $conn->{session}; normalizeSession($conn->{session}); for ($conn->server->connections) { if ($_->{session} == $conn->{session}) {
#This might be a lot to do at once, might need to break it up in the future.
# Update all connections joined to this session.