Giter VIP home page Giter VIP logo

libpomelo's People

Contributors

blueseason avatar changchang avatar cynron avatar eminom avatar fantasyni avatar herofj avatar jiangzhuo avatar liuyanghejerry avatar mrfranklin avatar rangercyh avatar stormzm avatar xiecc avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

libpomelo's Issues

json_dumps的隐患

json_dumps内部会调用 jsonp_malloc来分配内存,并把这个内存返回给调用者。
这块内存通常是调用者自己调用free释放。
但是jsonp_malloc是可以通过json_set_alloc_funcs来重新定义的。一旦jsonp_malloc被重新定义,比如使用了内存池,再用free释放这块内存就会出问题了。

目前看了一下在收发消息的时候,jansson内部会频繁调用jsonp_malloc和jsonp_free分配释放内存,所以考虑想用一块预分配好的内存池。所以发现上述问题。

windows下部署chat(cocos2d-x),libuv的链接错误

ibuv一直有错误,刚开始更多,引入了ws2_32.lib之后错误少了很多,但还是有四个错误:

1>libuv.lib(getaddrinfo.obj) : error LNK2019: 无法解析的外部符号
__imp__GetAddrInfoW@16,该符号在函数 _getaddrinfo_thread_proc@4 中被引用 1>libuv.lib(getaddrinfo.obj) : error LNK2019: 无法解析的外部符号
__imp__FreeAddrInfoW@4,该符号在函数 _uv_process_getaddrinfo_req 中被引用 1>libuv.lib(util.obj) : error LNK2019: 无法解析的外部符号
_GetAdaptersAddresses@20,该符号在函数 _uv_interface_addresses 中被引用 1>libuv.lib(util.obj) : error LNK2019: 无法解析的外部符号
_GetProcessMemoryInfo@12,该符号在函数 _uv_resident_set_memory 中被引用 1>E:\work\pomelo\multi-platform-cpp\proj.win32\Debug.win32\HelloCpp.exe : fatal error LNK1120: 4 个无法解析的外部命令
关于pomelo的三个项目libpomelo,libuv,jannson都进了解决方案,自己项目的依赖也设置了,在项目属性中依赖库叶把对应三个lib库手动加了进去,之后为了解决libuv错误还加了ws2_32.lib。

环境是windows vs2012 cocos2d-x 2.1.5

在PC_ST_CONNECTING状态下,什么情况会导致状态变成PC_ST_CLOSED

在client.c文件中的这个函数:
int pc_client_connect(pc_client_t *client, struct sockaddr_in *addr) {
pc_connect_t *conn_req = pc_connect_req_new(addr);

if(conn_req == NULL) {
fprintf(stderr, "Fail to malloc pc_connect_t.\n");
goto error;
}

if(pc_connect(client, conn_req, NULL, pc__client_connected_cb)) {
fprintf(stderr, "Fail to connect to server.\n");
goto error;
}

// 1. start work thread
// 2. wait connect result

uv_thread_create(&client->worker, pc__worker, client);

// TODO should set a timeout?
pc__cond_wait(client, 0);

pc_connect_req_destroy(conn_req);

if(PC_ST_WORKING != client->state) {
return -1;
}

return 0;
error:
if(conn_req) pc_connect_req_destroy(conn_req);
return -1;
}

看起来uv_thread_create函数创建线程是成功的,worker确实已经被赋值,此时client状态是PC_ST_CONNECTING,在执行pc_cond_wait函数后, 状态就变成PC_ST_CLOSED了,大概有哪些方面的原因会导致这种结果?

无网络的时候pc_client_destroy会卡死程序?在pc__client_force_join里面。

在有网络的时候可以正常连接,但在无网络的时候会在pc_client_destroy处卡死!附代码:
pc_client_t* gateClient = pc_client_new();
struct sockaddr_in address;
memset(&address, 0, sizeof(struct sockaddr_in));
address.sin_family = AF_INET;
address.sin_port = htons(SERVER_PORT);
address.sin_addr.s_addr = inet_addr(SERVER_HOST);
if (pc_client_connect(gateClient, &address)) {
CCLog("Gate server connected failed!\n");
mState = CLOSED;
pc_client_destroy(gateClient);
return;
}

服务器端主动关闭连接时,libpomelo未抛出事件

如题,应该在client.c的以下位置进行修改:
void pc__close_async_cb(uv_async_t *handle, int status) {
pc_client_t *client = (pc_client_t *)handle->data;
// 服务器端主动断开连接时,抛出断开事件
pc_emit_event(client, PC_EVENT_DISCONNECT, NULL);
pc_client_stop(client);
}

C++ 连接到 gate 时问题

server.json如下:
{
"development":{
"connector": [
{"id": "connector-server-1", "host": "127.0.0.1", "port": 3150, "clientPort": 3010, "frontend": true},
{"id": "connector-server-2", "host": "127.0.0.1", "port": 3151, "clientPort": 3011, "frontend": true},
{"id": "connector-server-3", "host": "127.0.0.1", "port": 3152, "clientPort": 3012, "frontend": true}
],
"chat": [
{"id": "chat-server-1", "host": "127.0.0.1", "port": 6150},
{"id": "chat-server-2", "host": "127.0.0.1", "port": 6151},
{"id": "chat-server-3", "host": "127.0.0.1", "port": 6152}
],
"gate":[
{"id": "gate-server-1", "host": "127.0.0.1", "port": 3153, "clientPort": 3014, "frontend": true}
]
},
"production":{
"connector": [
{"id": "connector-server-1", "host": "127.0.0.1", "port": 3150, "clientPort": 3010, "frontend": true},
{"id": "connector-server-2", "host": "127.0.0.1", "port": 3151, "clientPort": 3011, "frontend": true},
{"id": "connector-server-3", "host": "127.0.0.1", "port": 3152, "clientPort": 3012, "frontend": true}
],
"chat": [
{"id": "chat-server-1", "host": "127.0.0.1", "port": 6150},
{"id": "chat-server-2", "host": "127.0.0.1", "port": 6151},
{"id": "chat-server-3", "host": "127.0.0.1", "port": 6152}
],
"gate":[
{"id": "gate-server-1", "host": "127.0.0.1", "port": 3153, "clientPort": 3014, "frontend": true}
]
}
}

开启web-server时,能正常连接到gate。

用libpomelo的echo.c连接到connector-server-1时,正常,更改端口,使其连接到gate。
屏幕一闪过去了。

调试后发现 pc_client_connect 返回值 -1. 但未出现failed to connect server之类。或者其他的err message。

请问,这是何解? libpomelo的库问题?还是game-server的配置问题?
如果是game-server的配置问题,那么为何web-server能顺利连接?

另外,请问,能给一个libpomelo的API文档么?想改点什么现在都得看源码。。。

能否应用在wince6平台

提供的类库能否应用在wince6平台下,我考虑是否能在wince上做个客户应用。

另:flash lite 3.1支持pomelo提供的flash客户端接口吗?

Examples won't work

I'm using the tcp-pomelo test server:

"echo" : works
"request": works

but:

"echo2": wrong IP: const char *ip = "192.168.1.116"; => should be 127.0.0.1, then works

"robot_chat": wrong port: #define GATE_PORT 3014 => should be 3010, but fails after sending a line (or by starting a robot)

"notify": does not exit

windows下部署chat(cocos2d-x),libuv的链接错误

libuv一直有错误,刚开始更多,引入了ws2_32.lib之后错误少了很多,但还是有四个错误:

1>libuv.lib(getaddrinfo.obj) : error LNK2019: 无法解析的外部符号
__imp__GetAddrInfoW@16,该符号在函数 _getaddrinfo_thread_proc@4 中被引用 1>libuv.lib(getaddrinfo.obj) : error LNK2019: 无法解析的外部符号
__imp__FreeAddrInfoW@4,该符号在函数 _uv_process_getaddrinfo_req 中被引用 1>libuv.lib(util.obj) : error LNK2019: 无法解析的外部符号
_GetAdaptersAddresses@20,该符号在函数 _uv_interface_addresses 中被引用 1>libuv.lib(util.obj) : error LNK2019: 无法解析的外部符号
_GetProcessMemoryInfo@12,该符号在函数 _uv_resident_set_memory 中被引用 1>E:\work\pomelo\multi-platform-cpp\proj.win32\Debug.win32\HelloCpp.exe : fatal error LNK1120: 4 个无法解析的外部命令

关于pomelo的三个项目libpomelo,libuv,jannson都进了解决方案,自己项目的依赖也设置了,在项目属性中依赖库叶把对应三个lib库手动加了进去,之后为了解决libuv错误还加了ws2_32.lib。

环境是windows vs2012 cocos2d-x 2.1.5

PC build为release的问题

参考readme.md编译出来的静态LIB,在DEBUG下没有问题,在release编译的时候,出现

error LNK2038: 检测到“_ITERATOR_DEBUG_LEVEL”的不匹配项: 值“2”不匹配值“0”
这个错误。

好像是因为静态LIB不是release的问题?

请问如何讲libpomelo编译为release版本

Memory leak

Hi I tried the example in cocos2dx project.

When I was doing profiling I found xcode instruments reported the below leaking info. When I did call this

pc_client_destroy(client);

image

When I didn't call this line

pc_client_destroy(client);

xcode reports this leak
image

windows下部署chat(cocos2d-x),libuv的链接错误

ibuv一直有错误,刚开始更多,引入了ws2_32.lib之后错误少了很多,但还是有四个错误:

1>libuv.lib(getaddrinfo.obj) : error LNK2019: 无法解析的外部符号
__imp__GetAddrInfoW@16,该符号在函数 _getaddrinfo_thread_proc@4 中被引用 1>libuv.lib(getaddrinfo.obj) : error LNK2019: 无法解析的外部符号
__imp__FreeAddrInfoW@4,该符号在函数 _uv_process_getaddrinfo_req 中被引用 1>libuv.lib(util.obj) : error LNK2019: 无法解析的外部符号
_GetAdaptersAddresses@20,该符号在函数 _uv_interface_addresses 中被引用 1>libuv.lib(util.obj) : error LNK2019: 无法解析的外部符号
_GetProcessMemoryInfo@12,该符号在函数 _uv_resident_set_memory 中被引用 1>E:\work\pomelo\multi-platform-cpp\proj.win32\Debug.win32\HelloCpp.exe : fatal error LNK1120: 4 个无法解析的外部命令
关于pomelo的三个项目libpomelo,libuv,jannson都进了解决方案,自己项目的依赖也设置了,在项目属性中依赖库叶把对应三个lib库手动加了进去,之后为了解决libuv错误还加了ws2_32.lib。

环境是windows vs2012 cocos2d-x 2.1.5

notify方式和request方式的区别

我看到request方式和notify方式都会传进回调函数,区别只是一个带了服务端传回的数据,另一个没带,我想知道notify的回调函数调用的时机和request一样吗?既然request需要服务端传回的数据,那么notify不需要服务端的数据,那它的回调函数到底是为什么呢?是在等服务端传回什么信号吗?如果是这样,那notify跟request岂不是没有什么区别。

libpomelo如何结合cocoa2d-x来使用?

我这两天看了你们的C平台的sdk,如果要让libpomelo在cocoa2d-x下同时支持android和ios,解决的办法是否是将这个编译成.a静态库供给ios使用,编成.so给android使用;有这方面的教程吗?谢谢。

package.c assert in windows platform

static size_t pc__pkg_head(pc_pkg_parser_t *parser,
...
(line167)pkg_len += parser->head_buf[i];
.....

when data is ox"01 00 00 f3", pkg_len got 0xfffffff3 ,malloc error

I changed
pkg_len += (size_t)(unsigned char)parser->head_buf[i];
then ok. thanks,good job.

请教,使用libpomelo连接chatofpomelo的gameserver为什么会失败。。

const char *ip = "127.0.0.1";
int port = 3014;
int main() {
// create a client instance.
pc_client_t *client = pc_client_new();

struct sockaddr_in address;

memset(&address, 0, sizeof(struct sockaddr_in));
address.sin_family = AF_INET;
address.sin_port = htons(port);
address.sin_addr.s_addr = inet_addr(ip);

// add some event callback.
pc_add_listener(client, PC_EVENT_DISCONNECT, on_close);

// try to connect to server.
if(pc_client_connect(client, &address)) {
printf("fail to connect server.\n");
pc_client_destroy(client);
return 1;
}else{
printf("connect success!");
}
}

Build libpomelo.so for Android - how to?

which cocos2d-x version should I use? while using current cocos2d-x master, there is no third_party directory anymore. Trying to compile it results only in a libpomelo.a (but I need libpomelo.so). Any advise is welcome

你好,新手提问

我是用cocos2d-x客户端,能不能给个大概思路,客户端如何跟pomelo服务器连接上

static inline是C99的标准,vs编译器编不过

src\message.c 文件里

1

上面3个用static inline修饰的函数无法在vs编译器通过,去掉对应的inline和下面定义地方的inline就可以编过了,建议去掉,保证windows平台用vs编译器可以编过。

反复连接断开后程序会崩溃。

测试代码如下:

include

include "Pomelo.h"

include <pthread.h>

include <stdlib.h>

include <unistd.h>

int main(int argc, const char * argv[])
{
int count = 0;
pc_client_t* client;

for (;;)
{
    switch (count % 4)
    {
        case 0:
        {
            struct sockaddr_in address;
            memset(&address, 0, sizeof(struct sockaddr_in));
            address.sin_family = AF_INET;
            address.sin_port = htons(3017);
            address.sin_addr.s_addr = inet_addr("127.0.0.1");

            client = pc_client_new();

            pc_client_connect(client, &address);
        }
            break;
        case 1:
            pc_client_destroy(client);
            break;
        case 2:
        {
            struct sockaddr_in address;
            memset(&address, 0, sizeof(struct sockaddr_in));
            address.sin_family = AF_INET;
            address.sin_port = htons(3010);
            address.sin_addr.s_addr = inet_addr("127.0.0.1");

            client = pc_client_new();

            pc_client_connect(client, &address);
        }
            break;
        case 3:
            pc_client_destroy(client);
            break;
    }
    count++;
    sleep(1);
}
return 0;

}

重复连接3、5次后程序会崩溃。

libpomelo在64位win7下例子无法连通

在64位win7下下载代码,不修改编译选项直接编译然后运行tcp的那个服务端,echo等例子无法连通服务端,把tcp的服务端转到64位linux下,依然无法连通

xcode cocos2d项目卡死

单独写一个测试程序,一切正常
xcode 5 cocos2dx 2.2.2 项目中,主线程调用request,卡死,回调函数没响应
是不是线程的问题?

Fix sleep() function error under windows

void run_robot() {
int i = 0;
for (i = 0; i < MAX_RUN_NUM; i++) {
printf("send %d\n", i+1);
char str[10] = "test";
char tmp[10];
sprintf(tmp, "%d", i);
strcat(str, tmp);
msg_send(str, channel, user, "*");

#ifndef WIN32
sleep(1);

else

   Sleep(1);

endif

}

iOS切到后台,心跳超时后再返回应用,pc_client_stop调用uv_mutex_lock导致abort

iOS 应用使用libpomelo 版本0.3.2,
应用切到后台,开启飞行模式,等待心跳超时后再返回应用(不重现就等待久一点,5分钟以上),
这个时候会调用pc_client_stop,
而pc_client_stop会调用uv_mutex_lock,调用返回22,按照代码逻辑会直接调用abort。

void uv_mutex_lock(uv_mutex_t* mutex) {
if (pthread_mutex_lock(mutex)) // 切到后台后回来,这里返回22
abort();
}

./build_ios failed

/Users/zacharyhu/Downloads/libpomelo-master/src/pkg-handshake.c:211:3: error:
implicit declaration of function 'pc__heartbeat' is invalid in C99
[-Werror,-Wimplicit-function-declaration]
pc__heartbeat(client);
^
/Users/zacharyhu/Downloads/libpomelo-master/src/pkg-handshake.c:127:32: warning:
implicit conversion loses integer precision: 'long long' to 'int'
[-Wshorten-64-to-32]
client->heartbeat = hb * 1000;
~ ~~~^~~~~~
1 warning and 1 error generated.

** BUILD FAILED **

The following build commands failed:
CompileC build/pomelo.build/Default-iphoneos/libpomelo.build/Objects-normal/arm64/pkg-handshake.o src/pkg-handshake.c normal arm64 c com.apple.compilers.llvm.clang.1_0.compiler
(1 failure)

pc_request route json 编码失败

当使用pc_request时 会出现
Fail to json encode for message.
Fail to encode message with json: gate.gateHandler.authUID
Fail to encode request message.
之后线程卡死,追代码发现到msg-json.c里的json_dumps不知是否这里有问题?

在此附上代码

//Login waterfall
void MenuLayer::_doLoginWaterFall()
{
//new a client
pc_client_t* client = pc_client_new();
_connectServer(client);
}

void MenuLayer::_connectServer(pc_client_t* client)
{
const char* ip = GATE_HOST;
const int port = GATE_PORT;
struct sockaddr_in address;

memset(&address, 0, sizeof(struct sockaddr_in));
address.sin_family = AF_INET;
address.sin_port = htons(port);
address.sin_addr.s_addr = inet_addr(ip);

if(pc_client_connect(client, &address))
{
    //Future : Print on the UI
    //Now : log at Console
    CCLOGERROR("Fail to connect to server.");
    pc_client_destroy(client);
    return;
}

//Print on Console
CCLOG("Connect to server.");
//pass to next step
_sendRequest(client);

}

void MenuLayer::_sendRequest(pc_client_t* client)
{
const char* route = "gate.gateHandler.authUID";
json_t* msg = json_object();
json_t* uid = json_string("0");
json_object_set(msg, "uid", uid);
//decref
json_decref(msg);

pc_request_t* req = pc_request_new();
pc_request(client, req, route, msg, _onAuthUIDRequestCallback);

}

void MenuLayer::_onAuthUIDRequestCallback(pc_request_t* req,int status,json_t* resp)
{
if(status==-1)
{
CCLOG("Fail to send request to server");
}
else if(status==0)
{
char* json_str = json_dumps(resp, 0);
if(json_str!=nullptr)
{
CCLOG("server response:%s",json_str);
free(json_str);
}
}

//release
json_t* msg = req->msg;
pc_client_t* client = req->client;
json_decref(msg);
pc_request_destroy(req);

//stop
pc_client_stop(client);

}
//

Cannot make on CentOS 7

$make
Makefile:26: /data/archives/libpomelo/libpomelo/deps/uv/build.mk: No such file or directory
make: *** No rule to make target `/data/archives/libpomelo/libpomelo/deps/uv/build.mk'. Stop.

cocos2d-x 中使用 报错。

pc_client_t *client = pc_client_new();

这句报错。

bt信息如下:

  • thread #1: tid = 0x1c03, 0x9441d640 libsystem_c.dylibstrlen + 16, stop reason = EXC_BAD_ACCESS (code=1, address=0xf35d8d20) frame #0: 0x9441d640 libsystem_c.dylibstrlen + 16
    frame #1: 0x944a78c7 libsystem_c.dylib__vfprintf + 6254 frame #2: 0x9449e48b libsystem_c.dylibvsnprintf_l + 220
    frame #3: 0x9449e4ea libsystem_c.dylibvsnprintf + 74 frame #4: 0x029efbbf libsystem_sim_c.dylib__snprintf_chk + 47
    frame #5: 0x02710460 libSystem.dylib_interposition_vtable_unimplemented + 123 frame #6: 0x02726bd8 libSystem.dylibwrite$UNIX2003 + 60
    frame #7: 0x001a9dc0 project_xxxuv__signal_unlock + 48 at signal.c:89 frame #8: 0x001a9265 project_xxxuv__signal_global_init + 43 at signal.c:61
    frame #9: 0x94433019 libsystem_c.dylibpthread_once + 77 frame #10: 0x001a9235 project_xxxuv__signal_global_once_init + 36 at signal.c:67
    frame #11: 0x001a7849 project_xxxuv__loop_init(loop=0x0019da41, default_loop=0) + 20 at loop.c:33 frame #12: 0x001a4987 project_xxxuv_loop_new + 41 at core.c:235
    frame #13: 0x0019da6d project_xxx`pc_client_new + 57 at client.c:29

貌似pomelo.gyp错误

Win7执行 “build\gyp\gyp.bat --depth=. pomelo.gyp -Dlibrary=static_library”

NameError: name 'TO' is not defined while evaluating condition 'TO == "ios"' in
pomelo.gyp while trying to load pomelo.gyp

status in call back is always 0

According to the comment,

/**

  • Request callback.
    *
  • @param req request instance.
  • @param status request status. 0 for ok and -1 for error.
  • @param resp response message from server, NULL for error.
    */

it seems when error fed in "next" callback the status should be -1. But when I call something like this
next(new Error('what's up'), {});
I never got -1 in request callback. Anything wrong?

libpomelo支持 pomelo 0.6 里的新功能么?

“在pomelo 0.6版本中,对hybridconnector增加了数据签名的功能。客户端首先产生rsa的密钥对,客户端保留rsa私钥,在握手阶段客户端将公钥发到服务端;在发送消息阶段,客户端使用私钥对消息进行签名,客户端将消息和签名一起发送到服务端,服务端进行签名验证,如果验证成功后面的流程继续,如果验证失败则该数据包则不进行处理。”

0.6里增加数据加密功能,但我看到libpomelo已经几个月没更新了,看源码也没看到加密相关的内容?是否现在还不支持?什么时候能加上支持功能?

Android 编译错误

照着chat的ios编译说明编译成功了 但是Android编译时报错, 用的系统是MAC
cocos2dx/platform/third_party/android/prebuilt/libpomelo/deps/uv/include/uv-private/uv-unix.h:112:1: error: unknown type name 'pthread_rwlock_t'

照着例子对android.mk做了对应的修改。
是不是因为我用的MAC系统?chat例子中的设置好像是针对windows的。MAC系统上需要其他设置吗?

update libuv to the latest version

目前libpomelo自带的libuv版本比较老,其中有些libuv的API已经有变化,建议更新deps目录下的libuv到最新版本。

接收服务端自定义事件广播的监听接口需要完善

假设我服务端的广播为{ 'route':"onPushTest" , 'msg' : 'hello' }
libpomelo监听服务端广播的回调函数定义为:
void on_pushtest(pc_client_t *client, const char *event, void *data) ;

event 是 “onPushTest“ 没有问题。
这里的data 的原始类型是 json_t 。无法取到我发送的“hello”。
json_t msg = (json_t) data; //只能这样强转

我觉得data的原始类型至少应该是 pc__msg_raw_t 。
是不是个bug,还是我使用错误?

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.