Связь с сервером erlang через c ++ (отправка двоичного кода)

Я разрабатывал проект с использованием erlang, sfml и c ++ для создания сетевой игры. Я успешно общался с Erlang — Erlang, но столкнулся с некоторыми проблемами, связанными с C ++.

Ранее я был в состоянии отправить данные в этом формате (из «клиента»):

 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

Решение

C ++ / C может использовать ei библиотека кодировать данные в термины Erlang для отправки приложения Erlang через сокет, а также получать и декодировать термины Erlang. Написание такого приложения на C ++ / C утомительно, но как только вы получите базовый код, он будет работать довольно хорошо.

Также возможно написать не-Erlang узел, называемый Узел C, который связывается с узлом Erlang через Распределенный Эрланг. Вы можете сделать то же самое для Java, используя JInterface пакет. Для узла Erlang такой узел выглядит просто как другой узел в своем кластере. Как с ei приложения, написание таких узлов может быть утомительным, но они могут быть полезны, когда у вас есть код не-Erlang, который вы хотите легко и безопасно интегрировать в кластер Erlang.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]