diff --git a/Server/server.pl b/Server/server.pl index a4fa8b2..7e78d92 100755 --- a/Server/server.pl +++ b/Server/server.pl @@ -5,7 +5,7 @@ use POSIX; use Net::WebSocket::Server; use JSON; -use Data::Dumper; +use Data::Dumper; # For debuging only, REMOVE WHEN INITIAL CODE IS FINISH #########################Game Logic starts here########################## @@ -33,7 +33,7 @@ sub generateDeck { # Add proper handling for reading of DDFs } -sub shuffleDeck { +sub shuffle { my @deck = @_; my $index = 0; for (@deck) { @@ -48,22 +48,20 @@ sub shuffleDeck { sub addUser { my ($sessionID,$userID) = @_; -} - -sub delUser { - my ($sessionID,$userID) = @_; + $sessions{$sessionID}{"users"}{$userID} = ( + name => "$userID", + hands => () + ); } sub addCards { - my ($sessionID,$deckID, $DDF) = @_; + my ($sessionID,$deckID, $cards) = @_; + push(@{$sessions{$sessionID}{"decks"}{$deckID}->{cards}}, @$cards); } sub addDeck { my ($sessionID,$deckID) = @_; - my %newDeck = { - cards => [] - } - $sessions{$sessionID}{"decks"}{$deckID} = %newDeck; + $sessions{$sessionID}{"decks"}{$deckID} = ( name => "$deckID", cards => [] ); } sub delDeck { @@ -71,11 +69,101 @@ sub delDeck { $sessions{$sessionID}{"decks"}{$deckID} = undef; } -sub addPool {} +sub uploadDDF { + my ($sessionID, $deckID, $DDF) = @_; + addCards($sessionID,$deckID,\@{generateDeck($DDF)}); +} -sub delPool {} +sub addPool { + my ($sessionID,$poolID) = @_; + $sessions{$sessionID}{"pools"}{$poolID} = ( name => "$poolID", cards => [] ); +} +sub reapCards { + my $arrayRef = @_[0]; + my @reapedCards = []; + print "Reaping cards"; + while(@{$arrayRef}) { + push(@reapedCards,shift(@{$arrayRef})): + print "."; + } + print "Done\n"; + return @reapedCards; +} +sub delPool { + my ($sessionID,$poolID) = @_; + my @reapedCards = reapCards(\@{$sessions{$sessionID}{"pools"}{$poolID}->{cards}}); + $sessions{$sessionID}{"pools"}{$poolID} = undef; + return @reapedCards; +} + +sub getUsers { + my $sessionID = @_[0]; + return keys $sessions{$sessionID}{"users"}; +} + +sub getDecks { + my $sessionID = @_[0]; + return keys $sessions{$sessionID}{"decks"}; +} + +sub getPools { + my $sessionID = @_[0]; + return keys $sessions{$sessionID}{"pools"}; +} + +sub addHand { + my ($sessionID, $userID, $handID) = @_; + $sessions{$sessionID}{"users"}{$userID}->{hands}{$handID} = ( cards => [] ); +} + +sub delHand { + my ($sessionID, $userID, $handID) = @_; + my @leftoverCards = reapCards(\@{$sessions{$sessionID}{"users"}{$userID}->{hands}{$handID}->{cards}}); + $sessions{$sessionID}{"users"}{$userID}->{hands}{$handID} = undef; + return @leftoverCards; +} + +sub getHands { + my ($sessionID, $userID) = @_; + return keys $sessions{$sessionID}{"users"}{$userID}->{hands}; +} + +sub moveCard { + my ($originStackRef, $originIndex, $destStackRef, $destIndex) = @_; + # splice card out of one deck, and into the other. +} + +sub drawCard { + my ($sessionID, $deckID, $userID, $handID) = @_; + moveCard( + \@{$sessions{$sessionID}{"decks"}{$deckID}->{cards}}, 0, + \@{$sessions{$sessionID}{"users"}{$userID}->{hands}{$handID}->{cards}}, 0 + ); +} + +sub playCard { + my ($sessionID, $userID, $handID, $cardIndex, $poolID) = @_; + moveCard( + \@{$sessions{$sessionID}{"users"}{$userID}->{hands}{$handID}->{cards}}, $cardIndex, + \@{$sessions{$sessionID}{"pools"}{$poolID}->{cards}},0 + ); +} + +sub delUser { + my ($sessionID,$userID) = @_; + my @hands = getHands($sessions{$sessionID}{"users"}{$userID}->{hands}); + for (@hands) { + delHand($sessionID,$userID,$_); + } + $sessions{$sessionID}{"users"}{$userID} = undef; +} + +sub getDeckSize { + my ($sessionID, $deckID) = @_; + return length $sessions{$sessionID}{"decks"}{$deckID}->{cards}; +} ########################Game Logic ends here#############################