1
1
from threading import Lock
2
- from typing import Dict , List , Type
2
+ from typing import List
3
3
import grpc
4
4
from concurrent import futures
5
+
5
6
from Protos import main_pb2_grpc , main_pb2
6
7
from 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
7
11
8
12
class AIService (main_pb2_grpc .AIServiceServicer ):
9
13
def __init__ (self , ai : BaseAI , server_instance ):
10
14
self .ai = ai
11
15
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
12
20
13
21
def RegisterBot (self , request , context ):
14
22
return main_pb2 .RegistrationStatus (name = self .ai .bot_name , message = "" )
@@ -18,18 +26,21 @@ def PregamePrepare(self, request, context):
18
26
return main_pb2 .Empty ()
19
27
20
28
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 )
23
32
24
33
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 ()
28
39
29
40
def GameEnd (self , request , context ):
30
41
self .ai .game_end (request )
31
42
return main_pb2 .Empty ()
32
-
43
+
33
44
def CloseServer (self , request , context ):
34
45
print ("Received CloseServer request. Shutting down server..." )
35
46
self .server_instance .bot_disconnected ()
@@ -75,7 +86,15 @@ def run_grpc_server(self, ai_instances: List[BaseAI], port=50000, debug_prints=T
75
86
self .server = grpc .server (futures .ThreadPoolExecutor (max_workers = 10 ))
76
87
for i , ai in enumerate (ai_instances ):
77
88
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 )
80
99
self .server .start ()
81
100
return self .server
0 commit comments