<html>
<head>
<style><!--
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 10pt;
font-family:Tahoma
}
--></style></head>
<body class='hmmessage'><div dir='ltr'>
<br><br><div><div id="SkyDrivePlaceholder"></div>&gt; Date: Thu, 19 Apr 2012 07:24:33 -0400<br>&gt; From: d@davea.name<br>&gt; To: suryak@live.com<br>&gt; CC: tutor@python.org; bgailer@gmail.com<br>&gt; Subject: Re: [Tutor] how to select a player to play first on a multiplayer game which runs on IRC<br>&gt; <br>&gt; On 04/19/2012 06:54 AM, Surya K wrote:<br>&gt; &gt; I am writing tic tac toe game which runs on IRC (i am using freenode now).<br>&gt; &gt; Each player will be a channel member. So, players send private messages between each other to play game. This sounds fine but I need the below things to get done, but I don't know how to do them..<br>&gt; &gt; How my game works:<br>&gt; &gt; Each player will have my program (tictactoe.exe).<br>&gt; &gt; So, each player has to enter a unique Nick Name for them and a their's friend's nick name to play :<br>&gt; &gt; ## Now, I want to know whether the player is on the channel or not. for that I need a list of nick's on the channel. How to get them?<br>&gt; I can't help there.<br>&gt; <br>&gt; &gt; The biggest problem is here:<br>&gt; &gt; ## How to select a player to play first... ??? How do I get this done?<br>&gt; &gt;<br>&gt; &gt;<br>&gt; <br>&gt; In a peer-to-peer connection, there are a number of situations where you<br>&gt; have to break symmetry.  This is one of them, though not the first. <br>&gt; Since you don't have a 3rd party arbiter, the two endpoints have to<br>&gt; agree between themselves which of them is to be the arbiter when both<br>&gt; sides need to agree on something.  Once you've chosen the arbiter, then<br>&gt; each decision is made by asking the arbiter.<br>&gt; <br>&gt; Start by choosing a large "random" number (or guid) at each end.  Each<br>&gt; sends his own guid along with the two nick-names to propose the new<br>&gt; game.  One of the guids will be larger, and that machine is the arbiter.<br>&gt; <br>&gt; The first conflict to be resolved this way is not who goes first, but<br>&gt; how you make sure you only have one game between any two endpoints. <br>&gt; What happens if more than two players are present, and what happens if<br>&gt; more than one of them picks the same nickname?  Are you going to permit<br>&gt; one of the players to play against two others at the same time, and how<br>&gt; will you keep the games straight?  You need a connection token for each<br>&gt; running game, and that's probably the first time you need an arbiter.<br>&gt;&nbsp;</div><div><br></div><div>Actually, as in a IRC channel, each user should have a unique nick name, the problem is resolved.</div><div>Actually, in this game, the 2 players will have a private chat.. so, there would be no chance that other person will come into picture.</div><div><br></div><div><br></div><div>Rather that doing all this mess, I want to put a server on Google App Engine and run clients on my PC. But I don't know how!!</div><div><br></div><div>I have to know Google API for writing GAE app's using python 2.7</div><div><br></div><div>Lets say, I have created a server using python 2.7, can you tell me how to run it on GAE ??&nbsp;</div><div>(Assuming, I haven't used any google api)..&nbsp;</div><div><br></div><div>Actually, I don't need any Templates, nice HTML pages on Google App. Its enough to just mention how many peers are connected at that particular instant...</div><div><br></div><div>can you tell me how to do that??</div><div><br>&gt; The second case is choosing who goes first.  The arbiter probably<br>&gt; chooses that randomly, and notifies the other player.  The third case is<br>&gt; how to handle miscommunication.  Messages can be lost between the end<br>&gt; points, and you may have to reconstruct the state, so both ends get back<br>&gt; in synch.  Fourth is how to quit.  If one player quits, the other might<br>&gt; not get notified correctly, so you have to keep the connection token for<br>&gt; a while, to aid cleanup.<br>&gt; <br>&gt; <br>&gt; <br>&gt; -- <br>&gt; <br>&gt; DaveA<br>&gt; <br></div>                                               </div></body>
</html>