2016-03-29 12 views
1

ネットワーク化されたゲームを作成するために、erlang、sfml、およびC++を使用してプロジェクトを開発しています。私はいくつかの問題が発生したが、いくつかの成功を収めています。C++経由でerlangサーバと通信する(バイナリを送信する)

は、以前私が(「クライアント」から)この形式のデータを送信することができました:

gen_tcp:send(Socket, term_to_binary({Cmd, Parameters})); 
gen_tcp:send(Socket, term_to_binary({Cmd, {P1, P2}, P3})); 
gen_tcp:send(Socket, term_to_binary({Cmd})); 
gen_tcp:send(Socket, term_to_binary({Cmd, Msg})); 

とケースを使用してデータを処理:

client_handler(Socket) -> 
io:format("Waiting for data...~n", []), 

case gen_tcp:recv(Socket, 0) of 
{ok, Bin} -> 
    Cmd = binary_to_term(Bin), 
    io:format("Command '~p' received.~n", [Cmd]), 

case Cmd of 
    {register, NewAtom} ->   
     %%Do Stuff   
    {update_transform, {X,Y}, Rot} -> 
     %%Do Stuff  
    {get_transform} -> 
     %%Do Stuff 
    {send_message, Msg} -> 
     %%Do Stuff  
    _ -> 
     %%Do Stuff 
    end, 

client_handler(Socket); 

{error, _} -> 
    io:format("Lost connection to client!~n", []) 
end. 

は私のためにどのような方法がありますこのようにC++を使ってデータを送信するには?私はそのバイナリスティッキングを構築することを認識していますが、今までデータがどのような形式になっているかわからないのですが、これはC++で何か経験があったからです。

ありがとうございました!!!

+0

以下に示唆されている方法を使用したい方は、この便利なリンクをご利用ください。 [リンク](http://erlang.org/doc/apps/erl_interface/erl_interface.pdf) –

答えて

3

C++/Cはei libraryを使用してErlangの用語にデータをエンコードし、ソケットを介してErlangアプリケーションを送信し、Erlangの用語も受信してデコードします。このようなC++/Cアプリケーションを書くのは面倒ですが、一度基本的なコードを取得すれば、うまく動作します。

それは非Erlangのノードを記述することも可能です、Distributed Erlang経由Erlangのノードと通信する、C nodeと呼ばれます。 JInterface packageを使用すると、Javaで同じことができます。 Erlangノードには、そのようなノードがクラスタ内の別のノードとして表示されます。 eiのアプリケーションと同様に、そのようなノードの作成は面倒ですが、Erlang以外のコードを使用してErlangクラスタにシームレスかつ安全に統合したい場合に便利です。

+0

よろしくお願いします。私はいくつかの成功した結果を得る場合、それを報告してください! –

関連する問題