A lightweight & stable cross-platform support library with a focus on asynchronous socket I/O, support win32 & linux & apple & android & wp8 & wp8.1-universal & win10-universal
The core design is reference from https://github.com/chriskohlhoff/asio but very small.
This lib has been used by project http://hongjing.qq.com/ and run at millions of devices.
- support IPv6-only network.
- support multi-connections at one thread.
- support deadline timer.
- processing tcp sticky internal, user do not need to care it.
- support lua bindings
- support cocos2d-x jsb
- support CocosCreator jsb2.0
- support Unity3D tolua
- Only compile yasio\xxsocket.cpp with your project; For gcc, you must add --std=c++11 compile flag
- demo code:
#include "xxsocket.h"
using namespace yasio::inet;
void test_connect()
{
xxsocket clientsock;
// The interface xpconnect_n will detect whether localhost is IPV6 only network automatically
// and connect the ipv4 server by V4MAPPED address.
if(0 == clientsock.xpconnect_n("www.baidu.com", 443, std::chrono::seconds(5)/* connect timeout 5 seconds */))
{
printf("connect succeed\n");
}
}
Compile yasio\xxsocket.cpp yasio\yasio.cpp with your project
cpptest: https://github.com/halx99/yasio/blob/master/msvc/cpptest/cpptest.cpp
- Compile
yasio\xxsocket.cpp
yasio\yasio.cpp
yasio\ibstream.cpp
yasio\obstream.cpp
yasio\impl\lyasio.cpp
with your project - call luaopen_yasio after LUA VM initialized.
luatest(windows user): open https://github.com/halx99/yasio/blob/master/msvc/luatest/luatest.xsxproj by x-studio365 IDE
-
Copy the folder
yasio
to cocos2d-x engine's folderexternal
,yasio
as sub directory ofexternal
-
Add
yasio\xxsocket.cpp
yasio\yasio.cpp
yasio\ibstream.cpp
yasio\obstream.cpp
yasio\impl\lyasio.cpp
yasio\impl\yasio_cclua.cpp
to compile with your solution.
Add yasio to your application Android.mk files, such as:
LOCAL_STATIC_LIBRARIES += yasio_static
$(call import-module, external/yasio/build/android-lua)
Add yasio\xxsocket.cpp
yasio\yasio.cpp
yasio\ibstream.cpp
yasio\obstream.cpp
yasio\impl\lyasio.cpp
yasio\impl\yasio_cclua.cpp
to libluacocos2d project of your Visual Studio or xcode solution.
- Call luaopen_yasio_cclua(L) at your AppDelegate.cpp, please remember
#include "yasio/yasio_cclua.h"
firstly.
- Copy all sources to your Classes\yasio and compile obstream.cpp, ibstream.cpp, xxsocket.cpp, yasio.cpp, impl/yasio_jsb.cpp with your native project
- Add register code to your AppDelegate.cpp:
sc->addRegisterCallback(jsb_register_yasio);
, please includeyasio_jsb.h
firstly.
Add yasio to your application Android.mk files, such as:
LOCAL_STATIC_LIBRARIES += yasio_static
$(call import-module, external/yasio/build/android-jsb)
- Copy all sources to your Classes\yasio and compile obstream.cpp, ibstream.cpp, xxsocket.cpp, yasio.cpp, impl/yasio_jsb20.cpp with your native project
- Add register code to your jsb_module_register.cpp:
se->addRegisterCallback(jsb_register_yasio);
, please includeyasio_jsb20.h
firstly.
see: https://github.com/halx99/yasio/blob/master/msvc/jstest/example.js
showcase:
g++ yasio/xxsocket.cpp yasio/yasio.cpp yasio/ibstream.cpp yasio/obstream.cpp msvc/cpptest/cpptest.cpp --std=c++11 -lpthread -I./ -o cpptest && ./cpptest
- For Microsoft Visual Studio, if your project has specific precompiled header, you should include it at head of xxsocket.cpp or specific the compile option:
C/C++ --> Advance -->'Forced Include File'
to it(such as pch.h). - For Microsoft Visual Studio 2019 preview3 MSVC C++17, you must set compile option:
C/C++ --> Language --> Conformance mode
to No, otherwise, you will got compiling error:sol.hpp(8060): error C3779: 'sol::stack::get': a function that returns 'decltype(auto)' cannot be used before it is defined
see: https://github.com/halx99/LuaFramework_UGUI
showcase:
The core objects: service, channel, transport
service: event-loop, manage channel, transport, peek events
channel: manage connection session
transport: response for data transition
client: per channel, per transport
server: per channel, multi transports
call service open:
open a channel as client, the channel will try connect remote host
open a channel as server, the channel will start listening
events: connect response, connection lost, a packet received.