Hello,
I was going to do something similar with some 2 players games (which I
have yet to implement), but was planning on doing the polling on the
client-side with Javascript and AJAX.
There is a function in Javascript:
window.setTimeout(jsFunctionToRun, timeToRunInMilliseconds);
That can be called to force the page to call the passed in JS function
after timeToRunInMilliseconds. What I am planning on doing is having
my JSFunctionToRun be a function that makes an AJAX call (which will
call something to check the database) and gets the state of the game.
Then based on the state I get back, I'll do what I need on the
callback. The framework would look something like:
setTimeout("CheckState()", 5000) //Call JS Function CheckState() @ 5
seconds
function CheckState()
{
//Make AJAX call to function that will check and get the state value
from the DB
//Callback function: ProcessState()
}
function ProcessState()
{
//IF the db state says it's my turn, do code to make it my turn,
call setTimeoutAgain after I take my turn to get back in the polling
status
//ELSE call setTimeout("CheckState", 5000) to check if it's my turn
again in 5 seconds
}
I hope something like this helps :)
On Oct 15, 12:01 pm, meland <[email protected]> wrote:
> Hello,
>
> First, I would appreciate if anyone can help with this issue I'm
> facing. Second, I am new to web2py, and not a programmer by
> profession. I have written an application for conducting tournaments
> with the ultimatum game - a simple bargaining game. The problem: it
> seems to work fine running on my personal machine via localhost, but
> when hosted (WebFaction) the application locks up if a particular link
> is clicked more than once.
>
> The details... one player must wait for information from another
> player. I'm using a database poll as a means for the waiting player
> to know when information is available. While the polling takes place,
> the player's view is still presenting an active link. Clicking this
> link more than once causes a problem. As I mentioned above, the
> server-side pattern I've implemented works when running locally, but
> seems to fail in a hosted situation. Oh, since I'm less familiar with
> javascript than Python I was trying for a server-side solution. I
> have started reading about jQuery but have not yet been able to
> get .one() working to prevent extra clicks. Thank you in advance!
>
> The relevant code...
>
> The view and controller function from which the player clicks to begin
> the database poll...
>
> def responder_enter_game():
> """
> The point at which the responder enters the game.
> The view will hang on this page as the database polling is
> processed in
> the next page called from the view.
> Prior to calling this function, session.first_time must be set to
> True!
> """
> return dict()
>
> Note: I using the default layout.html
>
> {{extend 'layout.html'}}
> <h3>You are playing as a responder in this game...</h3>
> <ul>
> <li>{{=A(B(T("Click to enter game")), _href=URL('responder_waits'))}}
> </li>
> <li>{{=T('Please be patient...')}}</li>
> <li>{{=T('You will leave this page after a proposal has been
> offered.')}}</li>
> </ul>
>
> {{extend 'layout.html'}}
> <h3>Waiting for a response... please be patient</h3>
> {{redirect(URL('game_results_proposer'))}}
>
> Here is the controller code for responder_waits...
>
> def check_proposal_confirmed():
> """
> The resopnder's view is hanging on respnder_enters_game() until
> proposal_confirmed is True.
> The function time.sleep(0.5) causes a 0.5 second delay between
> polls on the database.
> """
> proposal_confirmed = False
>
> while not proposal_confirmed:
> proposal_confirmed =
> db.games[session.game_id].proposal_confirmed
> time.sleep(0.5)
>
> def responder_waits():
> """
> The responder is waiting for a proposal confirmation to be found
> in the database
> """
> if session.first_time: ## The first time the
> player clicks the link processing continues
> session.first_time = False ## The first time has passed
> check_proposal_confirmed() ## This function holds until the
> proposer confirms a proposal
> else: ## Any additional
> time the player clicks the link no action is taken
> pass
>
> return dict()