Skip to content
A multi-platform support library with focus on asio (asynchronous socket I/O) for any client application, support win32 & linux & apple & android & wp8 & wp8.1-universal & win10-universal.
C++ Other
  1. C++ 99.4%
  2. Other 0.6%
Branch: master
Clone or download
Latest commit b7effb4 Nov 15, 2019
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
build Add build dir. Aug 25, 2019
docs
examples
tests explicit specify YCF_REUSEPORT for udp-server. Nov 14, 2019
yasio
.appveyor.yml Rename appveyor.yml to .appveyor.yml Nov 9, 2019
.clang-format
.gitattributes Update .gitattributes Aug 11, 2017
.gitignore Update .gitignore Oct 21, 2019
.gitmodules Add submodule kcp Nov 11, 2019
.lgtm.yml Update build command for lgtm. Nov 14, 2019
.travis.yml Update .travis.yml Nov 9, 2019
CMakeLists.txt Set ftp_server as vs_startup project. Nov 12, 2019
LICENSE Update LICENSE May 17, 2019
Makefile Enable send complete callback. Nov 7, 2019
README.md
del-tmp.bat
framework.png
mkdocs.yml Remove depend header file: politedef.h Nov 5, 2019
version.md
yasio.xsxproj Tidy. Nov 10, 2019

README.md

yasio - Yet Another Socket IO service

Build Status Windows Build Status Release 996.icu LICENSE GitHub stars GitHub forks Language grade: C/C++

yasio is a multi-platform support library with focus on asynchronous TCP socket I/O for any client application, support win32 & linux & apple & android & wp8 & wp8.1-universal & win10-universal.
The core design is reference from asio but very small.
This lib has been used by project RedAlert OL and run at millions of devices.

Clone at github: yasio

Core framework

image

Features:

  • 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
  • support multicast

Intergation guides:

cpp intergation:

Compile yasio\xxsocket.cpp yasio\yasio.cpp with your project
please see: tcptest

Lua intergation:

common lua application integration:

  1. Compile yasio\xxsocket.cpp yasio\yasio.cpp yasio\ibstream.cpp yasio\obstream.cpp yasio\bindings\lyasio.cpp with your project
  2. call luaopen_yasio after LUA VM initialized.
    luatest(windows user): please download luatest.zip, extract it then open luatest.xsxproj by x-studio IDE

cocos2d-x lua integration:

  1. Copy the folder yasio to cocos2d-x engine's folder external, yasio as sub directory of external

  2. Add yasio\xxsocket.cpp yasio\yasio.cpp yasio\ibstream.cpp yasio\obstream.cpp yasio\bindings\lyasio.cpp yasio\bindings\yasio_cclua.cpp to your compile system.

    • For Win32 & Apple platform: Add yasio\xxsocket.cpp yasio\yasio.cpp yasio\ibstream.cpp yasio\obstream.cpp yasio\bindings\lyasio.cpp yasio\bindings\yasio_cclua.cpp to libluacocos2d project of your Visual Studio or xcode solution.
    • For Android: Add yasio to your application Android.mk files, such as:
LOCAL_STATIC_LIBRARIES += yasio_static
$(call import-module, external/yasio/jni/cocos-lua)
  1. Call luaopen_yasio_cclua(L) at your AppDelegate.cpp, please remember #include "yasio/yasio_cclua.h" firstly.

JSB integration

cocos2d-x jsb integration:

  1. Copy the folder yasio to cocos2d-x engine's folder external, yasio as sub directory of external
  2. Add obstream.cpp, ibstream.cpp, xxsocket.cpp, yasio.cpp, bindings/yasio_jsb.cpp to your compile system.
    • For Win32 & Apple platform: Add yasio\xxsocket.cpp yasio\yasio.cpp yasio\ibstream.cpp yasio\obstream.cpp yasio\bindings\lyasio.cpp yasio\bindings\yasio_jsb.cpp to libjscocos2d project of your Visual Studio or xcode solution.
    • For Android: Add yasio to your application Android.mk files, such as:
LOCAL_STATIC_LIBRARIES += yasio_static
$(call import-module, external/yasio/jni/cocos-jsb)
  1. Add register code to your AppDelegate.cpp: sc->addRegisterCallback(jsb_register_yasio);, please include yasio_jsb.h firstly.

CocosCreator jsb2.0 integration:

  1. Copy the folder yasio to cocos2d-x engine's folder external/sources, yasio as sub directory of external/sources
  2. Add obstream.cpp, ibstream.cpp, xxsocket.cpp, yasio.cpp, bindings/yasio_jsb20.cpp to your compile system.
    • For Win32 & Apple platform: Add yasio\xxsocket.cpp yasio\yasio.cpp yasio\ibstream.cpp yasio\obstream.cpp yasio\bindings\lyasio.cpp yasio\bindings\yasio_jsb.cpp to libcocos2d project of your Visual Studio or xcode solution.
    • For Andorid: Add follow 5 lines to cocos/Android.mk file:
../external/sources/yasio/xxsocket.cpp \
../external/sources/yasio/yasio.cpp \
../external/sources/yasio/ibstream.cpp \
../external/sources/yasio/obstream.cpp \
../external/sources/yasio/bindings/yasio_jsb20.cpp \
  1. Add register code to your jsb_module_register.cpp: se->addRegisterCallback(jsb_register_yasio); , please include yasio_jsb20.h firstly.

JS demo:

see: example.js

Quick test at linux platform with gcc compiler:

g++ yasio/xxsocket.cpp yasio/yasio.cpp yasio/ibstream.cpp yasio/obstream.cpp tests/tcp/main.cpp --std=c++11 -lpthread -I./ -o tcptest && ./tcptest or g++ tests/tcp/main.cpp --std=c++11 -DYASIO_HEADER_ONLY -lpthread -I./ -o tcptest && ./tcptest

pitfall:

  1. 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).
  2. For Microsoft Visual Studio 2019 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

Unity3D integration guide

Tencent xLua integration, see: https://github.com/halx99/xLua

For more detail usage: see wiki

You can’t perform that action at this time.