Hi Alex, Thanks for your suggestions. I was hoping to make this app work without resorting to client-side code mostly because I'm already behind schedule and getting up to speed with even simple jQuery will take time. But if I'm not able to resolve the current issue with web2py/Python on the server-side, then I will step back and take the client-side approach.
Cheers! On Oct 15, 1:13 pm, Alex <yue.a...@gmail.com> wrote: > 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 <eland.m...@gmail.com> 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()