예제 #1
0
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;
}
예제 #2
0
파일: conn.cpp 프로젝트: JackWangCUMT/kcpuv
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;
}
예제 #3
0
파일: conn.c 프로젝트: susemm/ckcpuv
/*@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;
}