Ejemplo n.º 1
0
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);
}
Ejemplo n.º 2
0
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);
}
Ejemplo n.º 3
0
gint fru_connect(void)
{
	return cb_connect(NULL, &dialogs);
}
Ejemplo n.º 4
0
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;
    }
}