tested all functions and fixed reference and logic issues

This commit is contained in:
bluesaxman 2020-09-07 08:53:16 -06:00
parent df4572115f
commit f73049a854

View File

@ -13,16 +13,17 @@ my %sessions = ();
sub generateSession { sub generateSession {
my $newSession = shift; my $newSession = shift;
unless (defined $newSession) { $newSession = time; } unless (defined $newSession) { my $uniquifyer = sprintf("%.0f",rand()*1000); $newSession = time.$uniquifyer; }
if ( grep( /$newSession/, keys %sessions ) ) { if ( grep( /$newSession/, keys %sessions ) ) {
generateSession(); return 0 #failur to create session
} else { } else {
print "Adding session ".$newSession." to database\n"; print "Adding session ".$newSession." to database\n";
$sessions{$newSession} = (); $sessions{$newSession} = {
$sessions{$newSession}{"id"} = $newSession; "id" => $newSession,
$sessions{$newSession}{"users"} = (); "users" => {},
$sessions{$newSession}{"decks"} = (); "decks" => {},
$sessions{$newSession}{"pools"} = (); "pools" => {},
};
} }
return $newSession; return $newSession;
@ -68,15 +69,34 @@ sub shuffle {
$deck[$index] = $swapCard; $deck[$index] = $swapCard;
$index++; $index++;
} }
return @deck; return \@deck;
}
sub shuffleDeck {
my ($sessionID, $deckID) = @_;
my @cards = @{$sessions{$sessionID}{"decks"}{$deckID}->{cards}};
$sessions{$sessionID}{"decks"}{$deckID}->{cards} = shuffle(@cards);
}
sub shufflePool {
my ($sessionID, $poolID) = @_;
my @cards = @{$sessions{$sessionID}{"pools"}{$poolID}->{cards}};
@{$sessions{$sessionID}{"pools"}{$poolID}->{cards}} = shuffle(@cards);;
}
sub shuffleHand {
my ($sessionID, $userID, $handID) = @_;
my @cards = @{$sessions{$sessionID}{"users"}{$userID}->{hands}{$handID}->{cards}};
$sessions{$sessionID}{"users"}{$userID}->{hands}{$handID}->{cards} = shuffle(@cards);
} }
sub addUser { sub addUser {
my ($sessionID,$userID) = @_; my ($sessionID,$userID) = @_;
%{$sessions{$sessionID}{"users"}{$userID}} = ( $sessions{$sessionID}{"users"}{$userID} = {
name => "$userID", name => "$userID",
hands => () hands => {}
); };
addHand($sessionID,$userID,"default");
} }
sub addCards { sub addCards {
@ -86,12 +106,12 @@ sub addCards {
sub addDeck { sub addDeck {
my ($sessionID,$deckID) = @_; my ($sessionID,$deckID) = @_;
%{$sessions{$sessionID}{"decks"}{$deckID}} = ( name => "$deckID", cards => [] ); $sessions{$sessionID}{"decks"}{$deckID} = { name => "$deckID", cards => [] };
} }
sub delDeck { sub delDeck {
my ($sessionID,$deckID) = @_; my ($sessionID,$deckID) = @_;
$sessions{$sessionID}{"decks"}{$deckID} = undef; delete($sessions{$sessionID}{"decks"}{$deckID});
} }
sub uploadDDF { sub uploadDDF {
@ -101,25 +121,26 @@ sub uploadDDF {
sub addPool { sub addPool {
my ($sessionID,$poolID) = @_; my ($sessionID,$poolID) = @_;
%{$sessions{$sessionID}{"pools"}{$poolID}} = ( name => "$poolID", cards => [] ); $sessions{$sessionID}{"pools"}{$poolID} = { name => "$poolID", cards => [] };
} }
sub reapCards { sub reapCards {
my $arrayRef = $_[0]; my $arrayRef = $_[0];
my @reapedCards = []; my @reapedCards = ();
print "Reaping cards"; print "Reaping cards";
while(@{$arrayRef}) { while(@{$arrayRef}) {
push(@reapedCards,shift(@{$arrayRef})); push(@reapedCards,shift(@{$arrayRef}));
print "."; print ".";
} }
print "Done\n"; print "Done\nReaped:";
print join(", ",@reapedCards)."\n";
return @reapedCards; return @reapedCards;
} }
sub delPool { sub delPool {
my ($sessionID,$poolID) = @_; my ($sessionID,$poolID) = @_;
my @reapedCards = reapCards(\@{$sessions{$sessionID}{"pools"}{$poolID}->{cards}}); my @reapedCards = reapCards(\@{$sessions{$sessionID}{"pools"}{$poolID}->{cards}});
$sessions{$sessionID}{"pools"}{$poolID} = undef; delete($sessions{$sessionID}{"pools"}{$poolID});
return @reapedCards; return @reapedCards;
} }
@ -140,32 +161,37 @@ sub getPools {
sub addHand { sub addHand {
my ($sessionID, $userID, $handID) = @_; my ($sessionID, $userID, $handID) = @_;
%{$sessions{$sessionID}{"users"}{$userID}->{hands}{$handID}} = ( cards => [] ); $sessions{$sessionID}{"users"}{$userID}{hands}{$handID} = { cards => [] };
} }
sub delHand { sub delHand {
my ($sessionID, $userID, $handID) = @_; my ($sessionID, $userID, $handID) = @_;
my @leftoverCards = reapCards(\@{$sessions{$sessionID}{"users"}{$userID}->{hands}{$handID}->{cards}}); my @leftoverCards = reapCards(\@{$sessions{$sessionID}{"users"}{$userID}->{hands}{$handID}->{cards}});
$sessions{$sessionID}{"users"}{$userID}->{hands}{$handID} = undef; delete($sessions{$sessionID}{"users"}{$userID}{hands}{$handID});
return @leftoverCards; return @leftoverCards;
} }
sub getHands { sub getHands {
my ($sessionID, $userID) = @_; my ($sessionID, $userID) = @_;
return keys %{$sessions{$sessionID}{"users"}{$userID}->{hands}}; return keys %{$sessions{$sessionID}{"users"}{$userID}{hands}};
} }
sub moveCard { sub moveCard {
my ($originStackRef, $originIndex, $destStackRef, $destIndex) = @_; my ($originStackRef, $originIndex, $destStackRef, $destIndex) = @_;
unless(defined($originStackRef)) { return print "ERROR: No Origin Stack\n"; }
unless(defined($originIndex)) { return print "ERROR: No Origin Index\n"; }
unless(defined($destStackRef)) { return print "ERROR: No Destination Stack\n"; }
unless(defined($destIndex)) { return print "ERROR: No Destination Index\n"; }
my $card = splice(@$originStackRef,$originIndex,1); my $card = splice(@$originStackRef,$originIndex,1);
unless(defined($card)) { return print "ERROR: No Card available to be pulled\n"; }
splice(@$destStackRef,$destIndex,0,$card); splice(@$destStackRef,$destIndex,0,$card);
} }
sub drawCard { sub drawCard {
my ($sessionID, $deckID, $userID, $handID) = @_; my ($sessionID, $deckID, $userID, $handID) = @_;
moveCard( moveCard(
\@{$sessions{$sessionID}{"decks"}{$deckID}->{cards}}, 0, $sessions{$sessionID}{"decks"}{$deckID}->{cards}, 0,
\@{$sessions{$sessionID}{"users"}{$userID}->{hands}{$handID}->{cards}}, 0 $sessions{$sessionID}{"users"}{$userID}->{hands}{$handID}->{cards}, 0
); );
} }
@ -179,11 +205,13 @@ sub playCard {
sub delUser { sub delUser {
my ($sessionID,$userID) = @_; my ($sessionID,$userID) = @_;
my @hands = getHands($sessions{$sessionID}{"users"}{$userID}->{hands}); my @hands = getHands($sessionID,$userID);
my @reaped = ();
for (@hands) { for (@hands) {
delHand($sessionID,$userID,$_); push(@reaped,delHand($sessionID,$userID,$_));
} }
$sessions{$sessionID}{"users"}{$userID} = undef; delete($sessions{$sessionID}{"users"}{$userID});
return @reaped;
} }
sub getDeckSize { sub getDeckSize {