11from threading import Lock
2- from typing import Dict , List , Type
2+ from typing import List
33import grpc
44from concurrent import futures
5+
56from Protos import main_pb2_grpc , main_pb2
67from AIService .base_ai import BaseAI
8+ from ScriptsOfTribute .board import build_game_state
9+ from ScriptsOfTribute .move import from_proto_move
10+ from ScriptsOfTribute .enums import PatronId
711
812class AIService (main_pb2_grpc .AIServiceServicer ):
913 def __init__ (self , ai : BaseAI , server_instance ):
1014 self .ai = ai
1115 self .server_instance = server_instance
16+ self .engine_service_stub = None
17+
18+ def set_engine_service_stub (self , stub ):
19+ self .engine_service_stub = stub
1220
1321 def RegisterBot (self , request , context ):
1422 return main_pb2 .RegistrationStatus (name = self .ai .bot_name , message = "" )
@@ -18,18 +26,21 @@ def PregamePrepare(self, request, context):
1826 return main_pb2 .Empty ()
1927
2028 def SelectPatron (self , request , context ):
21- patron = self .ai .select_patron (request .availablePatrons )
22- return main_pb2 .PatronIdMessage (patronId = patron )
29+ patrons = [PatronId (patron ) for patron in request .availablePatrons ]
30+ patron = self .ai .select_patron (patrons )
31+ return main_pb2 .PatronIdMessage (patronId = patron .value )
2332
2433 def Play (self , request , context ):
25- import pdb ; pdb .set_trace ()
26- move = self .ai .play (request .gameState , request .possibleMoves )
27- return move
34+ game_state = build_game_state (request .gameState , self .engine_service_stub )
35+ # game_state.debug_print()
36+ moves = [from_proto_move (proto_move ) for proto_move in request .possibleMoves ]
37+ move = self .ai .play (game_state , moves )
38+ return move .to_proto ()
2839
2940 def GameEnd (self , request , context ):
3041 self .ai .game_end (request )
3142 return main_pb2 .Empty ()
32-
43+
3344 def CloseServer (self , request , context ):
3445 print ("Received CloseServer request. Shutting down server..." )
3546 self .server_instance .bot_disconnected ()
@@ -75,7 +86,15 @@ def run_grpc_server(self, ai_instances: List[BaseAI], port=50000, debug_prints=T
7586 self .server = grpc .server (futures .ThreadPoolExecutor (max_workers = 10 ))
7687 for i , ai in enumerate (ai_instances ):
7788 self .add_bot ()
78- main_pb2_grpc .add_AIServiceServicer_to_server (AIService (ai , self ), self .server )
79- self .server .add_insecure_port (f"[::]:{ port + i } " )
89+ ai_service = AIService (ai , self )
90+ assigned_port = port + i
91+ self .server .add_insecure_port (f"localhost:{ assigned_port } " )
92+ engine_service_channel = grpc .insecure_channel (f"localhost:{ assigned_port } " )
93+ engine_service_stub = main_pb2_grpc .EngineServiceStub (engine_service_channel )
94+ if debug_prints :
95+ print (f"Bot { ai .bot_name } listening on localhost:{ assigned_port } " )
96+ ai_service .set_engine_service_stub (engine_service_stub )
97+
98+ main_pb2_grpc .add_AIServiceServicer_to_server (ai_service , self .server )
8099 self .server .start ()
81100 return self .server
0 commit comments