void ConnClient::on_recv_udp_snd_conv(const char* buf, ssize_t size) { int r = -1; kcpuv_conv_t conv; hs_snd_conv_s* hs = NULL; r = ikcp_get_conv(buf, (long)size, &conv); PROC_ERR_NOLOG(r); CHK_COND_NOLOG(conv == CONV_SND_CONV); CHK_COND_NOLOG(sizeof(hs_snd_conv_s) == size); hs = (hs_snd_conv_s*)buf; CHK_COND_NOLOG(hs->n == _req_conn.n); r = init_kcp(hs->new_conv); PROC_ERR_NOLOG(r); _conv = hs->new_conv; _key = hs->key; hs_ack_conv_s ack; ack.header.key = _key; r = send_kcp((const char*)&ack, sizeof(ack)); PROC_ERR(r); _status = CONV_ESTABLISHED; Exit0: return; }
int Conn::init(kcpuv_conv_t conv, const sockaddr* addr, uv_udp_t* handle) { _conv = conv; _addr = *addr; _udp = handle; int r = -1; _kcp = ikcp_create(conv, (void*)this); CHK_COND(_kcp); _kcp->output = on_kcp_output; r = ikcp_nodelay(_kcp, 1, 10, 2, 1); PROC_ERR(r); return 0; Exit0: return -1; }
/*@ckcpuv*/ int conn_init(conn_t * thiz, kcpuv_conv_t conv, const struct sockaddr* addr, uv_udp_t* handle) { thiz->_conv = conv; thiz->_addr = *addr; thiz->_udp = handle; int r = -1; thiz->_kcp = ikcp_create(conv, (void*)thiz); CHK_COND(thiz->_kcp); thiz->_kcp->output = on_kcp_output; r = ikcp_nodelay(thiz->_kcp, 1, 10, 2, 1); PROC_ERR(r); return 0; Exit0: return -1; }