LINUX.ORG.RU

c++: proxy/stab generators

 


0

3

Допустим, у есть класс. Его методы хочется прокинуть по TCP или еще через какой-нибудь шланг.

Как на C++ правильно автоматически создать для этого класса прокси? Т.е. две части: прокси-сервер (принимающий TCP, например) + стаб этого класса для клиента?

Есть какие-нибудь генераторы стабов, умеющие C# либо Javascript? (клиент написан на C# так, что подключение нативного кода неприятно усложнено). Ну или чтобы можно было добавить кастомные языки.

★★★★☆

Если нет возражений против GPL, то ZeroC Ice, но условия коммерческой лицензии у него мутные.

Begemoth ★★★★★
()
Ответ на: комментарий от Begemoth

Возражения есть, Apache/BSD/MIT only, LGPL по необходимости случаях. Все использованные либы должны быть строго бесплатными. Все равно спасибо)

stevejobs ★★★★☆
() автор топика
Последнее исправление: stevejobs (всего исправлений: 1)
Ответ на: комментарий от vromanov

А каково твое личное мнение по поводу protobuf vs thrift vs avro vs ... ?

Вот например я сразу наткнулся на Слоника, который высрал про протобуф тонну кирпичей: http://slonik-v-domene.livejournal.com/131569.html

И рекомендует вместо этого JSON, и я никак не могу распарсить, а зафига JSON-то, менять статику на динамику - шило на мыло - вкусовщина

stevejobs ★★★★☆
() автор топика
Ответ на: комментарий от stevejobs

Мы используем протобуф и жсон. Жсон гоняем по вебу, поротобуф пишем в базу. На мой взгляд, слоник туфту написал.

vromanov ★★★
()
Ответ на: комментарий от stevejobs

И да, у нас ещё есть и диаметер и хмл. Для диаметра написан свой парсер и сериализатор. Парсит как раз в с++ классы. Было бы забавно увидеть игрушку живущую по диаметру :)

vromanov ★★★
()

можешь свелосипедить на кутях, типа:

// mycoolrpc.hpp

class MyCoolRPC : public RPCBase
{
public slots:
    int testMethod(float param);
};

// mycoolrpc.srv.cpp

int MyCoolRPC::testMethod(float param)
{
// do server stuff
    return ceil(param);
}

// mycoolrpc.client.cpp

int MyCoolRPC::testMethod(float param)
{
    return RPCBase::invokeSrv("testMethod") << param;
}

т.е. один хедер, а реализация разная, для разных таргетов. в RPCBase сделать invokeSrv с сериализацией полученного, и invokeFromClient для сервера, который из сериализованного дергает слот, выбирая его через рефлексию (moc). Сериализацию и транспорт можно сделать сменными, на рефлексии можно сделать встроенный генератор всякого стафа, типа wsdl и биндингов, асинхронный вызов добавить, чтоб можно было спагетти через std::function колотить...

при любом несоответствии сервера/клиента будет как минимум warning компилятора, что есть хорошо.

dib2 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.