import sys, random
from twisted.cred import credentials
from twisted.spread import pb
class RandomPlayer:
def __init__(self, name):
self.name = name
def login(self, host, port, pword):
self.factory = pb.PBClientFactory()
d = self.factory.login(credentials.UsernamePassword(self.name, pword))
d.addCallbacks(self.loggedIn, disaster)
from twisted.internet import reactor
reactor.connectTCP(host, int(port), self.factory)
def loggedIn(self, perspective):
self.perspective = perspective
d = self.perspective.callRemote('getBoardSize')
d.addCallbacks(self.gotSize, disaster)
return d
def gotSize(self, size):
self.boardSize = size
x = random.randrange(size)
y = random.randrange(size)
d = self.perspective.callRemote('move', x, y)
d.addCallbacks(self.madeMove, disaster)
return d
def madeMove(self, ignored):
d = self.perspective.callRemote('getBoard')
d.addCallbacks(self.displayBoard, disaster)
d.addCallbacks(self.quit, disaster)
return d
def displayBoard(self, board):
print board
def quit(self, ignored):
from twisted.internet import reactor
self.factory.disconnect()
reactor.stop()
def disaster(failing):
print failing
sys.exit(-1)
def main(host, port, username, password):
from twisted.internet import reactor
player = RandomPlayer(username)
player.login(host, int(port), password)
reactor.run()
if __name__ == '__main__':
main(*(sys.argv[1:5]))
syntax highlighted by Code2HTML, v. 0.9.1