私はErlangが初めてで、単純なゲームサーバーを構築しようとしています(学習目的)。
複数のクライアント ハンドラー (gen_server) を作成する 1 つのクライアント コントローラー (スーパーバイザー) があります。複数のゲーム ハンドラー (gen_server) を作成する 1 つのゲーム コントローラー (スーパーバイザー) もあります。
次に、1 つのゲーム ハンドラ (ゲーム テーブル) が複数のクライアント ハンドラ (プレイヤー) と通信します。次のようなクライアント ハンドラーを作成します。
client_handler.erl:
start_link(ClientId, UniqueId) ->
ClientHandlerId = utils:create_id(?MODULE, UniqueId), //client_handler_0
State = #state{client_id = ClientId, client_handler_id = ClientHandlerId},
gen_server:start_link({global, ClientHandlerId}, ?MODULE, State, []).
game_handler.erl:
start_link(ClientHandlerId, GameId, UniqueId) ->
GameHandlerId = utils:create_id(?MODULE, UniqueId), //game_handler_0
State = #state{client_handler_id = ClientHandlerId, game_id = GameId, game_handler_id = GameHandlerId},
gen_server:start_link({global, GameHandlerId}, ?MODULE, State, []).
私の問題は、 client_handler と game_handler の間で、どちらも内部構造を知らずに話したいということです。今のところ私は使用します:
client_handler.erl:
gen_server:cast(game_handler_0, {make_move, MoveData}).
これはうまく機能します。ただし、次を使用したいと思います。
client_handler.erl:
game_handler_0:make_move(MoveData)
したがって、モジュールごとに個別の API を構築できます (-export 関数のみを使用します)。これは可能ですか?
よろしく、 xqtr
編集:タイプミス