Я работаю над приложением для iPhone для блэкджека, которое взаимодействует с сокетом Twisted, чтобы обеспечить возможность онлайн-игры. Моя проблема на данный момент - найти правильный порт. Позволь мне объяснить.
Я создал класс под названием «Таблица». Он содержит такую информацию, как таблица блэкджека, например, позиции, игроки и колода карт. Одна таблица назначена одному сокету Twisted, а один сокет назначен одному порту. Прямо сейчас тестирую только порты 1025-1034.
Я хочу, чтобы приложение запрашивало количество игроков за каждым столом в порядке возрастания портов. Для тестирования я разрешаю за столом только 1 пользователю. Если 1 пользователь находится за столом, я хочу, чтобы сокет возвращал Table_Not_Found, но вместо этого, даже если пользователь находится за столом, сокет возвращает порт, на котором находится человек, а не следующий порт, на котором никого нет.
Не думаю, что я что-то делаю правильно с классом Table и ищу открытую таблицу. Как мне найти нужный порт? Приложение подключается к порту, если порт занят, возвращается Table_Not_Found, затем приложение запрашивает следующий доступный порт. Но в моем случае сокет всегда возвращает занятый порт. Я могу тестировать только свои iMac и MacBook, поскольку они являются клиентами.
Итог, как мне найти доступную таблицу на порту?
Спасибо!
class Table:
def __init__(self):
self.players = []
self.positions = []
self.id = 0
self.numberOfPlayers = 0
def setID(self, _id):
self.id = _id
def setActivePlayer(self, player):
player.countdown = 20
while player.count > 0:
print player.countdown
time.sleep(1)
player.countdown -= 1
if player.countdown == 0:
print "Out of time"
moves.surrender(player)
class Socket(Protocol):
table = Table()
def connectionMade(self):
#self.transport.write("""connected""")
self.factory.clients.append(self)
print "Clients are ", self.factory.clients
def connectionLost(self, reason):
self.factory.clients.remove(self)
def dataReceived(self, data):
#print "data is ", data
a = data.split(':')
if len(a) > 1:
command = a[0]
content = a[1]
b = content.split(';')
_UDID = b[0].replace('\n', '')
if command == "Number_of_Players":
if Socket.table.numberOfPlayers == 0:
msg = "%s:TableFound" % _UDID
elif Socket.table.numberOfPlayers == 1:
msg = "%s:Table_Not_Found" % _UDID
print msg
for c in self.factory.clients:
c.message(msg)
def message(self, message):
self.transport.write(message)
NUM_TABLES = 10
factories = [ ]
for i in range(0, NUM_TABLES):
print i
factory = Factory()
factory.protocol = Socket
factory.clients = []
factories.append(factory)
reactor.listenTCP(1025+i, factory)
#print "Blackjack server started"
reactor.run()
table
- это переменная класса, поэтому у вас есть только одна таблица, доступная для всех сокетов, а не по одной на порт. - person ypercubeᵀᴹ   schedule 03.06.2012table
внутри методаSocket.__init__()
. - person ypercubeᵀᴹ   schedule 03.06.2012