class ServerConnection(object): def __init__(self, host, port, key, app, service, topic, lang, format, uuid, inter_utt_silence, cmn_latency, logger=None, punctuation=True, ipv4=False, capitalize=False, expected_num_count=0): self.host = host self.port = port self.key = key self.app = app self.topic = topic self.service = service self.lang = lang self.format = format self.uuid = uuid self.logger = logger self.punctuation = punctuation self.inter_utt_silence = inter_utt_silence self.cmn_latency = cmn_latency self.ipv4 = ipv4 self.capitalize = capitalize self.expected_num_count = expected_num_count self.log("uuid={0}".format(self.uuid)) self.session_id = "not-set" self.connect() def log(self, message): if self.logger is not None: self.logger.info(message) def connect(self): self.t = Transport(self.host, self.port, timeout=None, verbose=False, enable_ssl=(self.port == 443), ipv4=self.ipv4) if not self.upgrade_connection(): raise ServerError('Unable to upgrade connection') self.log("Connected to {0}:{1}.".format(self.host, self.port)) response = self.send_init_request() if response.responseCode != 200: error_text = 'Wrong response from server, status_code={0}'.format( response.responseCode) if response.HasField("message"): error_text += ', message is "{0}"'.format(response.message) raise ServerError(error_text) self.session_id = response.sessionId self.log("session_id={0}".format(self.session_id)) return self.session_id def send_init_request(self): request = ConnectionRequest( speechkitVersion='', serviceName=self.service, uuid=self.uuid, apiKey=self.key, applicationName=self.app, device='desktop', coords='0, 0', topic=self.topic, lang=self.lang, format=self.format, punctuation=self.punctuation, advancedASROptions=AdvancedASROptions( utterance_silence=int(self.inter_utt_silence), cmn_latency=self.cmn_latency, capitalize=self.capitalize, expected_num_count=self.expected_num_count, biometry="children", )) self.t.sendProtobuf(request) return self.t.recvProtobuf(ConnectionResponse) def upgrade_connection(self): logger = logging.getLogger('arslib') request = ('GET /asr_partial_checked HTTP/1.1\r\n' 'User-Agent: {user_agent}\r\n' 'Host: {host}:{port}\r\n' 'Upgrade: {service}\r\n\r\n').format(user_agent=self.app, host=self.host, port=self.port, service=self.service) self.t.send(request) check = 'HTTP/1.1 101 Switching Protocols' buffer = '' # possible infinite loop here? while True: buffer += self.t.recv(1) if buffer.startswith(check) and buffer.endswith('\r\n\r\n'): return True if len(buffer) > 300: logger.warning(buffer) return False def close(self): self.session_id = "" self.t.close() def reconnect(self, delay=None): self.log('Reconnecting!') self.close() if delay is not None: self.log('Going to sleep for {0} seconds'.format(delay)) time.sleep(delay) self.connect() def add_data(self, chunk): if chunk is None: self.t.sendProtobuf(AddData(lastChunk=True)) else: self.t.sendProtobuf(AddData(lastChunk=False, audioData=chunk)) def get_response_if_ready(self): response = self.t.recvProtobufIfAny(AddDataResponse) if response is not None: if response.responseCode != 200: error_text = 'Wrong response from server, status_code={0}'.format( response.responseCode) if response.HasField("message"): error_text += ', message is "{0}"'.format(response.message) raise ServerError(error_text) return response
class ServerConnection(object): def __init__(self, host, port, key, app, service, topic, lang, format, logger=None, punctuation=True): self.host = host self.port = port self.key = key self.app = app self.topic = topic self.service = service self.lang = lang self.format = format self.uuid = randomUuid().hex self.logger = logger self.punctuation = punctuation self.log("uuid={0}".format(self.uuid)) self.session_id = "" self.connect() def log(self, message): if self.logger is not None: self.logger.info(message) def connect(self): self.t = Transport(self.host, self.port, timeout=None, verbose=False) if not self.upgrade_connection(): raise ServerError('Unable to upgrade connection') self.log("Connected to {0}:{1}.".format(self.host, self.port)) response = self.send_init_request() if response.responseCode != 200: error_text = 'Wrong response from server, status_code={0}'.format( response.responseCode) if response.HasField("message"): error_text += ', message is "{0}"'.format(response.message) raise ServerError(error_text) self.session_id = response.sessionId self.log("session_id={0}".format(self.session_id)) return self.session_id def send_init_request(self): request = ConnectionRequest( speechkitVersion='Not Speechkit', serviceName=self.service, uuid=self.uuid, apiKey=self.key, applicationName=self.app, device='desktop', coords='0, 0', topic=self.topic, lang=self.lang, format=self.format, punctuation=self.punctuation) self.t.sendProtobuf(request) return self.t.recvProtobuf(ConnectionResponse) def upgrade_connection(self): logger = logging.getLogger('arslib') request = ('GET /asr_partial_checked HTTP/1.1\r\n' 'User-Agent: {user_agent}\r\n' 'Host: {host}:{port}\r\n' 'Upgrade: {service}\r\n\r\n').format( user_agent=self.app, host=self.host, port=self.port, service=self.service) self.t.send(request) check = 'HTTP/1.1 101 Switching Protocols' buffer = '' # possible infinite loop here? while True: buffer += self.t.recv(1) if buffer.startswith(check) and buffer.endswith('\r\n\r\n'): return True if len(buffer) > 300: logger.warning(buffer) return False def close(self): self.session_id = "" self.t.close() def reconnect(self, delay=None): self.log('Reconnecting!') self.close() if delay is not None: self.log('Going to sleep for {0} seconds'.format(delay)) time.sleep(delay) self.connect() def add_data(self, chunk): if chunk is None: self.t.sendProtobuf(AddData(lastChunk=True)) else: self.t.sendProtobuf(AddData(lastChunk=False, audioData=chunk)) def get_utterance_if_ready(self): response = self.t.recvProtobufIfAny(AddDataResponse) if response is not None: if response.responseCode != 200: error_text = 'Wrong response from server, status_code={0}'.format( response.responseCode) if response.HasField("message"): error_text += ', message is "{0}"'.format(response.message) raise ServerError(error_text) self.log("got response: endOfUtt={0}; len(recognition)={1}".format(response.endOfUtt, len(response.recognition))) if len(response.recognition) == 0: return "", response.messagesCount text = response.recognition[0].normalized.encode('utf-8') merged = response.messagesCount self.log("partial result: {0}; merged={1}".format(text, merged)) if response.endOfUtt: return text, merged else: return "", response.messagesCount return None, 0
class ServerConnection(object): def __init__(self, host, port, key, app, service, topic, lang, format, logger=None): self.host = host self.port = port self.key = key self.app = app self.topic = topic self.service = service self.lang = lang self.format = format self.uuid = randomUuid().hex self.logger = logger self.log("uuid={0}".format(self.uuid)) self.session_id = "" self.connect() def log(self, message): if self.logger is not None: self.logger.info(message) def connect(self): self.t = Transport(self.host, self.port, timeout=None, verbose=False) if not self.upgrade_connection(): raise ServerError('Unable to upgrade connection') self.log("Connected to {0}:{1}.".format(self.host, self.port)) response = self.send_init_request() if response.responseCode != 200: error_text = 'Wrong response from server, status_code={0}'.format( response.responseCode) if response.HasField("message"): error_text += ', message is "{0}"'.format(response.message) raise ServerError(error_text) self.session_id = response.sessionId self.log("session_id={0}".format(self.session_id)) return self.session_id def send_init_request(self): request = ConnectionRequest( speechkitVersion='Not Speechkit', serviceName=self.service, uuid=self.uuid, apiKey=self.key, applicationName=self.app, device='desktop', coords='0, 0', topic=self.topic, lang=self.lang, format=self.format) self.t.sendProtobuf(request) return self.t.recvProtobuf(ConnectionResponse) def upgrade_connection(self): logger = logging.getLogger('arslib') request = ('GET /asr_partial_checked HTTP/1.1\r\n' 'User-Agent: {user_agent}\r\n' 'Host: {host}:{port}\r\n' 'Upgrade: {service}\r\n\r\n').format( user_agent=self.app, host=self.host, port=self.port, service=self.service) self.t.send(request) check = 'HTTP/1.1 101 Switching Protocols' buffer = '' # possible infinite loop here? while True: buffer += self.t.recv(1) if buffer.startswith(check) and buffer.endswith('\r\n\r\n'): return True if len(buffer) > 300: logger.warning(buffer) return False def close(self): self.session_id = "" self.t.close() def reconnect(self, delay=None): self.log('Reconnecting!') self.close() if delay is not None: self.log('Going to sleep for {0} seconds'.format(delay)) time.sleep(delay) self.connect() def add_data(self, chunk): if chunk is None: self.t.sendProtobuf(AddData(lastChunk=True)) else: self.t.sendProtobuf(AddData(lastChunk=False, audioData=chunk)) def get_utterance_if_ready(self): response = self.t.recvProtobufIfAny(AddDataResponse) if response is not None: if response.responseCode != 200: error_text = 'Wrong response from server, status_code={0}'.format( response.responseCode) if response.HasField("message"): error_text += ', message is "{0}"'.format(response.message) raise ServerError(error_text) self.log("got response: endOfUtt={0}; len(recognition)={1}".format(response.endOfUtt, len(response.recognition))) if len(response.recognition) == 0: return "", response.messagesCount text = response.recognition[0].normalized.encode('utf-8') merged = response.messagesCount self.log("partial result: {0}; merged={1}".format(text, merged)) if response.endOfUtt: return text, merged else: return "", response.messagesCount return None, 0
class ServerConnection(object): def __init__(self, host, port, key, app, service, topic, lang, format, uuid, inter_utt_silence, cmn_latency, logger=None, punctuation=True, ipv4=False, capitalize=False, expected_num_count=0): self.host = host self.port = port self.key = key self.app = app self.topic = topic self.service = service self.lang = lang self.format = format self.uuid = uuid self.logger = logger self.punctuation = punctuation self.inter_utt_silence = inter_utt_silence self.cmn_latency = cmn_latency self.ipv4 = ipv4 self.capitalize = capitalize self.expected_num_count = expected_num_count self.log("uuid={0}".format(self.uuid)) self.session_id = "not-set" self.connect() def log(self, message): if self.logger is not None: self.logger.info(message) def connect(self): self.t = Transport(self.host, self.port, timeout=None, verbose=False, enable_ssl=(self.port==443), ipv4=self.ipv4) if not self.upgrade_connection(): raise ServerError('Unable to upgrade connection') self.log("Connected to {0}:{1}.".format(self.host, self.port)) response = self.send_init_request() if response.responseCode != 200: error_text = 'Wrong response from server, status_code={0}'.format( response.responseCode) if response.HasField("message"): error_text += ', message is "{0}"'.format(response.message) raise ServerError(error_text) self.session_id = response.sessionId self.log("session_id={0}".format(self.session_id)) return self.session_id def send_init_request(self): request = ConnectionRequest( speechkitVersion='', serviceName=self.service, uuid=self.uuid, apiKey=self.key, applicationName=self.app, device='desktop', coords='0, 0', topic=self.topic, lang=self.lang, format=self.format, punctuation=self.punctuation, advancedASROptions=AdvancedASROptions( utterance_silence=int(self.inter_utt_silence), cmn_latency=self.cmn_latency, capitalize=self.capitalize, expected_num_count=self.expected_num_count, biometry="children", ) ) self.t.sendProtobuf(request) return self.t.recvProtobuf(ConnectionResponse) def upgrade_connection(self): logger = logging.getLogger('arslib') request = ('GET /asr_partial_checked HTTP/1.1\r\n' 'User-Agent: {user_agent}\r\n' 'Host: {host}:{port}\r\n' 'Upgrade: {service}\r\n\r\n').format( user_agent=self.app, host=self.host, port=self.port, service=self.service) self.t.send(request) check = 'HTTP/1.1 101 Switching Protocols' buffer = '' # possible infinite loop here? while True: buffer += self.t.recv(1) if buffer.startswith(check) and buffer.endswith('\r\n\r\n'): return True if len(buffer) > 300: logger.warning(buffer) return False def close(self): self.session_id = "" self.t.close() def reconnect(self, delay=None): self.log('Reconnecting!') self.close() if delay is not None: self.log('Going to sleep for {0} seconds'.format(delay)) time.sleep(delay) self.connect() def add_data(self, chunk): if chunk is None: self.t.sendProtobuf(AddData(lastChunk=True)) else: self.t.sendProtobuf(AddData(lastChunk=False, audioData=chunk)) def get_response_if_ready(self): response = self.t.recvProtobufIfAny(AddDataResponse) if response is not None: if response.responseCode != 200: error_text = 'Wrong response from server, status_code={0}'.format( response.responseCode) if response.HasField("message"): error_text += ', message is "{0}"'.format(response.message) raise ServerError(error_text) return response
class Client(object): def __init__(self): self.command_map = { 'login': self.login, 'create': self.create, 'join': self.join, 'leave': self.leave, 'raise': self.raise_bet, 'fold': self.fold, 'call': self.call, } self.card_suit_map = { 1: SPADES, 2: HEARTS, 3: DIAMONDS, 4: CLUBS, } self.card_value_map = { 2: '2', 3: '3', 4: '4', 5: '5', 6: '6', 7: '7', 8: '8', 9: '9', 10: '10', 11: 'J', 12: 'Q', 13: 'K', 14: 'A', } self.round_status_map = { 0: 'Unknown', 1: 'Begining', 2: 'Preflop', 3: 'Flop', 4: 'Turn', 5: 'River', 6: 'End', } self.table_status_map = { 0: 'Unknown', 1: 'Waiting for players', 2: 'Game in progress', 3: 'Game ended', } self.transport = Transport(HOST, PORT) self.working_flag = False def run(self): self.working_flag = True thread.start_new_thread(self.recv_response, ()) while self.working_flag: command = raw_input('# ') if command == 'help' or command == '-h' or command == '--help' or command == 'h' or command == '?': self.print_commands() elif command == 'quit' or command == 'q': self.working_flag = False elif command == '': continue else: try: handler = self.command_map[command] msg = handler() self.transport.send(msg) except KeyError: print("Wrong command") except ValueError: print("Wrong argument") def print_commands(self): for key, value in self.command_map.items(): print(key) def recv_response(self): while self.working_flag: data = self.transport.recv(2048) response = Protocol_pb2.Response() response.ParseFromString(data) print('') which_one_of = response.WhichOneof("payload") if which_one_of == "lobbyView": self.recv_lobby_view(response.lobbyView) elif which_one_of == "tableView": self.recv_table_view(response.tableView) else: print('Error: {}'.format(response.error)) def login(self): username = raw_input('Username = '******'Table name = ') max_players = int(raw_input('Max players = ')) msg = Protocol_pb2.Request(createTable=Protocol_pb2.CreateTable( name=table_name, maxPlayers=max_players)) return msg.SerializeToString() def join(self): table_name = raw_input('Table name = ') msg = Protocol_pb2.Request(joinTable=Protocol_pb2.JoinTable( name=table_name)) return msg.SerializeToString() def leave(self): pass def raise_bet(self): chips = int(raw_input('Chips = ')) msg = Protocol_pb2.Request(raise_bet=Protocol_pb2.Raise(chips=chips)) return msg.SerializeToString() def fold(self): msg = Protocol_pb2.Request(fold=Protocol_pb2.Fold()) return msg.SerializeToString() def call(self): msg = Protocol_pb2.Request(call=Protocol_pb2.Call()) return msg.SerializeToString() def recv_lobby_view(self, msg): for x in range(5): print('') print('--------------- TABLES ---------------') for table in msg.tables: print(table.name) print(" players: {}/{}".format(table.players, table.maxPlayers)) print("") print('--------------------------------------') def recv_table_view(self, msg): for x in range(5): print('') print('---------------- INFO ----------------') print('status: {}'.format(self.table_status_map[msg.tableStatus])) print('round: {}'.format(self.round_status_map[msg.roundStatus])) print('pot: {}'.format(msg.pot)) print('--------------- CARDS ----------------') for card in msg.cards: print(" " + self.card_value_map[card.cardValue] + self.card_suit_map[card.cardSuit]) print('-------------- PLAYERS ---------------') for player in msg.players: print(player.name) for card in player.hand: print(" " + self.card_value_map[card.cardValue] + self.card_suit_map[card.cardSuit]) print(" chips: {}".format(player.chips)) print(" bet: {}".format(player.bet)) if player.turn: print(" dealer") if msg.tableStatus == 2 and not player.inGame: print(" folded") if player.turn: print(" turn") print('--------------------------------------')