Added initial connection negotiation logic to server
This commit is contained in:
parent
93596ab81a
commit
c6944c8667
@ -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) = @_;
|
||||
|
Loading…
x
Reference in New Issue
Block a user