Twisted ソケットとやり取りしてオンライン ゲームプレイを可能にする Blackjack iPhone アプリを開発中です。現時点での私の問題は、適切なポートを見つけることです。説明させてください。
「テーブル」というクラスを作成しました。ポジション、プレイヤー、カード デッキなど、ブラックジャック テーブルのような情報を保持します。1 つの Twisted ソケットに 1 つのテーブルが割り当てられ、1 つのポートに 1 つのソケットが割り当てられます。現在、ポート 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()