GithubHelp home page GithubHelp logo

msgpack-rpc-asio's Introduction

msgpack-rpc-asio

msgpack-rpc for windows.

Updates

Files

msgpack-0.5.7

  • msgpack/src/*

https://github.com/msgpack/msgpack-c Apache License Version 2.0

msgpack-rpc

  • msgpack-rpc-asio/include/msgpack/rpc/protocol.h

https://github.com/msgpack/msgpack-rpc Apache License Version 2.0

msgpack-rpc-asio

  • msgpack/premake4.lua
  • msgpack-rpc-asio/premake4.lua
  • msgpack-rpc-asio/include/msgpack/rpc/asio.h
  • msgpack-rpc-asio/include/msgpack/rpc/asio/*
  • msgpack-rpc-asio/include/msgpack/tuple_util.h
  • sapmple/*
  • test/*
  • premake4.lua
  • README.md

msgpackおよびmsgpack-rpcの本家と同じ Apache License Version 2.0

Build

  • vs2010.batを実行
  • msgpack-rpc-asio.slnを開く

Requied

  • gcc-4.5.4/vc2010
  • msgpack
  • boost

Sample

#include <msgpack/rpc/asio.h>
#include <thread>


class SomeClass
{
    int m_number;

public:
    void setNumber(const int &number){ m_number=number; }
    int getNumber()const{ return m_number; }
};


int main(int argc, char **argv)
{
    const static int PORT=8070;

    // dispatcher
    msgpack::rpc::asio::dispatcher dispatcher;
    dispatcher.add_handler("add", [](int a, int b)->int{ return a+b; });
    dispatcher.add_handler("mul", [](float a, float b)->float{ return a*b; });
    SomeClass s;
	dispatcher.add_property("number", std::function<SomeClass*()>([&s](){ return &s; })
            , &SomeClass::getNumber
            , &SomeClass::setNumber
            );

    // server
    boost::asio::io_service server_io;
    msgpack::rpc::asio::server server(server_io, [&dispatcher](
                const msgpack::object &msg, 
                std::shared_ptr<msgpack::rpc::asio::session> session)
            {
                dispatcher.dispatch(msg, session);
            });
    server.listen(boost::asio::ip::tcp::endpoint(boost::asio::ip::tcp::v4(), PORT));
    std::thread server_thread([&server_io](){ server_io.run(); });

    // client
    boost::asio::io_service client_io;
    msgpack::rpc::asio::client client(client_io); 
    client.connect_async(boost::asio::ip::tcp::endpoint(
                    boost::asio::ip::address::from_string("127.0.0.1"), PORT));
    std::thread clinet_thread([&client_io](){ client_io.run(); });

    // sync request
	int result1;
    std::cout << "add, 1, 2 = " << client.call_sync(&result1, "add", 1, 2) << std::endl;

    // async request
    auto request2=client.call_async("mul", 1.2f, 5.0f);
    std::cout << *request2 << std::endl;
    float result2;
    std::cout << "result = " << request2->sync().convert(&result2) << std::endl;

	// property
	{
		auto request3=client.call_async("set_number", 64);
		std::cout << *request3 << std::endl;
		request3->sync();
	}
	{
		auto request3=client.call_async("get_number");
		request3->sync();
		std::cout << *request3 << std::endl;
	}

    // stop asio
    client_io.stop();
    clinet_thread.join();

    server_io.stop();
    server_thread.join();

    return 0;
}
add, 1, 2 = 3
mul(1.2, 5) = ?
result = 6
set_number(64) = ?
get_number() = 64

msgpack-rpc-asio's People

Contributors

ousttrue avatar

Watchers

 avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.