static void ai_offline(void) { gchar *style; callbacks.offline = callbacks.quit; style = g_strdup_printf("ai %s", algorithms[active_algorithm].name); cb_connect(server, port, name, !algorithms[active_algorithm].request_player, style); g_free(style); g_free(name); }
void TcpSocketImpl::onConnect(int err) { KUMA_INFOXTRACE("onConnect, err="<<err<<", state="<<getState()); if(0 == err) { setState(ST_OPEN); #ifdef KUMA_HAS_OPENSSL if(SslEnabled()) { err = startSslHandshake(false); if(KUMA_ERROR_NOERR == err && ssl_handler_->getState() == SslHandler::SslState::SSL_HANDSHAKE) { return; // continue to SSL handshake } } #endif } if(err != KUMA_ERROR_NOERR) { cleanup(); setState(ST_CLOSED); } EventCallback cb_connect = std::move(cb_connect_); if(cb_connect) cb_connect(err); }
gint fru_connect(void) { return cb_connect(NULL, &dialogs); }
void TcpSocketImpl::ioReady(uint32_t events) { switch(getState()) { case ST_CONNECTING: { if(events & KUMA_EV_ERROR) { KUMA_ERRXTRACE("ioReady, KUMA_EV_ERROR, events="<<events <<", err="<<getLastError()<<", state="<<getState()); onConnect(KUMA_ERROR_POLLERR); } else { bool destroyed = false; destroy_flag_ptr_ = &destroyed; onConnect(KUMA_ERROR_NOERR); if(destroyed) { return ; } destroy_flag_ptr_ = nullptr; if((events & KUMA_EV_READ)) { onReceive(0); } } break; } case ST_OPEN: { #ifdef KUMA_HAS_OPENSSL if(ssl_handler_ && ssl_handler_->getState() == SslHandler::SslState::SSL_HANDSHAKE) { int err = KUMA_ERROR_NOERR; if(events & KUMA_EV_ERROR) { err = KUMA_ERROR_POLLERR; } else { SslHandler::SslState ssl_state = ssl_handler_->doSslHandshake(); if(SslHandler::SslState::SSL_ERROR == ssl_state) { err = KUMA_ERROR_SSL_FAILED; } else if(SslHandler::SslState::SSL_HANDSHAKE == ssl_state) { return; } } if(cb_connect_) { EventCallback cb_connect = std::move(cb_connect_); cb_connect(err); } else if(err != KUMA_ERROR_NOERR) { onClose(err); } else { events |= KUMA_EV_WRITE; // notify writable } if(err != KUMA_ERROR_NOERR) { return; } } #endif bool destroyed = false; destroy_flag_ptr_ = &destroyed; if(events & KUMA_EV_READ) {// handle EPOLLIN firstly onReceive(0); } if(destroyed) { return; } destroy_flag_ptr_ = nullptr; if((events & KUMA_EV_ERROR) && getState() == ST_OPEN) { KUMA_ERRXTRACE("ioReady, KUMA_EV_ERROR, events="<<events <<", err="<<getLastError()<<", state="<<getState()); onClose(KUMA_ERROR_POLLERR); break; } if((events & KUMA_EV_WRITE) && getState() == ST_OPEN) { onSend(0); } break; } default: //KUMA_WARNXTRACE("ioReady, invalid state="<<getState() // <<", events="<<events); break; } }