コード例 #1
0
void CGameNet::Update(float _dt)
{
	if (mNetState == ENetState::None)
	{
	}
	else if (mNetState == ENetState::Connected)
	{
	}
	else if (mNetState == ENetState::Connected)
	{
		if (mOnConnectDlg)
			mOnConnectDlg(true);

		_changeState(ENetState::Networking);
	}
	else if (mNetState == ENetState::Networking)
	{
		int a = 1;
	}
	else if (mNetState == ENetState::Disconnected)
	{
		if (mOnDisconnectDlg)
			mOnDisconnectDlg(true);

		_changeState(ENetState::Reconnect);
	}
	else if (mNetState == ENetState::Disconnected)
	{

	}
}
コード例 #2
0
void SSMLoadOnlineConfig_Enter(void)
{
    if(appGWActivationData.configuration.id[0] == '\0')
    {
        _changeState(STATE_NEEDS_MORE_CONFIG);
    }
    else if(appGWActivationData.configuration.key[0] == '\0')
    {
        _changeState(STATE_ACTIVATING);
    }
    else
    {
        _changeState(STATE_DOWNLOAD_LORA_CONFIG);
    }
}
コード例 #3
0
void CGameNet::NotifyDisconnected()
{
	printf("--- NotifyDisconnected\n");
	mSendThRunnable = false;
	mRecvThRunnable = false;

	_changeState(ENetState::Disconnected);
}
コード例 #4
0
bool CGameNet::_connect(std::string _ip, int _port)
{
	mIp = _ip;
	mPort = _port;

	if (mNetSocket == NULL)
	{
		mNetSocket = new CNetSocket();
	}

	bool result = true;
	if (!mNetSocket->Initialize())
		result = false;

	int errCode = 0;

	if (result && mNetSocket->Connect(_ip.c_str(), _port, errCode))
	{
		printf("---@@@ connect to %s:%d success @@@---\n", _ip.c_str(), _port);
		mSendThRunnable = true;
		mRecvThRunnable = true;
		_start(); //链接成功开始工作线程

		//if (mOnConnectDlg)
		//	mOnConnectDlg(true);

		_changeState(ENetState::Connected);

		return true;
	}
	else
	{
		printf("--------- connect fail, errCode:%f\n", errCode);
		//mSendThRunnable = false;
		//mRecvThRunnable = false;
		if (mOnConnectDlg)
			mOnConnectDlg(false);
		return false;
	}
}
コード例 #5
0
void SSMWaitForInternet_Enter(void)
{
    _changeState(STATE_WAIT_FOR_NETWORK);
}
コード例 #6
0
void SSMWaitForInternet_Tasks(void)
{
    switch(_state)
    {
        case STATE_WAIT_FOR_NETWORK:
            if(APP_ETH_Has_Link())
            {
                SYS_PRINT("INET: Gateway has Ethernet\r\n");
                _changeState(STATE_SETTLE);
            }
            else if(!appWifiData.valid)
            {
                SYS_PRINT("INET: No Ethernet and no WiFi config\r\n");
                _changeState(STATE_AP_ONLY);
            }
            if(APP_WIFI_Has_LinkINFRA())
            {
                SYS_PRINT("INET: Gateway has WiFi\r\n");
                _changeState(STATE_SETTLE);
            }
            break;

        case STATE_AP_ONLY:
            if(APP_ETH_Has_Link())
            {
                _changeState(STATE_WAIT_FOR_NETWORK);
            }
            else if(appWifiData.valid && ((SYS_TMR_TickCountGet() - wifiRetryStartTick) >=
                                          (SYS_TMR_TickCounterFrequencyGet() * WIFI_RETRY_TIMEOUT)))
            { // REVIEW: Use isElapsed kind of function
                if(APP_WIFI_Has_LinkAP())
                {
                    if(firstTimeAPReconnectTimeout)
                    {
                        SYS_PRINT("INET: Not trying to connect to WiFi router again because client is connected (after "
                                  "%d seconds)\r\n",
                                  (SYS_TMR_TickCountGet() - wifiRetryStartTick) / SYS_TMR_TickCounterFrequencyGet());
                        firstTimeAPReconnectTimeout = false;
                    }
                }
                else
                {
                    SYS_PRINT("INET: Trying to connect to WiFi router again (after %d seconds)\r\n",
                              (SYS_TMR_TickCountGet() - wifiRetryStartTick) / SYS_TMR_TickCounterFrequencyGet());
                    _changeState(STATE_WAIT_FOR_NETWORK);
                }
            }
            break;

        case STATE_SETTLE:
            if((SYS_TMR_TickCountGet() - settleStartTick) >= (SYS_TMR_TickCounterFrequencyGet() * 5))
            {
                _changeState(STATE_PING_PROBE);
            }
            break;

        case STATE_PING_PROBE:
            if(!ping_probe_sent)
            {
                IPV4_ADDR googledns = {0};
                googledns.v[0]      = 8;
                googledns.v[1]      = 8;
                googledns.v[2]      = 4;
                googledns.v[3]      = 4;

                ping_probe_reply_received = false;

                SYS_PRINT("INET: Ping probe\r\n");
                if(TCPIP_ICMP_EchoRequestSend(TCPIP_STACK_IndexToNet(WIFI_INTERFACE_NUM), &googledns, 0, 0x1234) !=
                   ICMP_ECHO_OK)
                {
                    SYS_PRINT("INET: Error sending probe on WiFi\r\n");
                }
                if(TCPIP_ICMP_EchoRequestSend(TCPIP_STACK_IndexToNet(ETH_INTERFACE_NUM), &googledns, 0, 0x1234) !=
                   ICMP_ECHO_OK)
                {
                    SYS_PRINT("INET: Error sending probe on Eth\r\n");
                }
                ping_probe_sent = true;
            }
            else if(ping_probe_reply_received)
            {
                SYS_PRINT("INET: Ping response from %s, set as default\r\n",
                          TCPIP_STACK_NetNameGet(TCPIP_STACK_NetDefaultGet()));
                if(ntpEverSynchronized)
                {
                    _changeState(STATE_DONE);
                }
                else
                {
                    _changeState(STATE_WAIT_FOR_NTP);
                }
                break;
            }
            else
            {
                if((SYS_TMR_TickCountGet() - pingStartTick) >=
                   (SYS_TMR_TickCounterFrequencyGet() * PING_TIMEOUT)) // REVIEW: Use isElapsed kind of function
                {
                    SYS_PRINT("INET: Ping Timeout of :%d seconds\r\n", PING_TIMEOUT);
                    pingStartTick             = SYS_TMR_TickCountGet();
                    ping_probe_sent           = false;
                    ping_probe_reply_received = false;
                    if(ping_retry >= PING_RETRIES)
                    {
                        // TODO: find a proper recovery -> _changeState(STATE_WAIT_FOR_NETWORK);
                        RebootWithMessage("Ping timeout %d retries, rebooting", PING_RETRIES);    
                        
                    }
                    ping_retry++;
                }
            }
            break;

        case STATE_WAIT_FOR_NTP:
        {
            uint32_t lastUpdate = 0;
            TCPIP_SNTP_TimeStampGet(NULL, &lastUpdate);
            if(lastUpdate != 0)
            { // If at least once NTP succeeded
                ntpEverSynchronized = true;
                _changeState(STATE_DONE);
            }
            else
            {
                if((SYS_TMR_TickCountGet() - ntpStartTick) >= (SYS_TMR_TickCounterFrequencyGet() * NTP_TIMEOUT))
                { // REVIEW: Use isElapsed kind of function
                    SYS_PRINT("INET: Not received any NTP response. Wait for network again (after %d seconds).\r\n",
                              (SYS_TMR_TickCountGet() - ntpStartTick) / SYS_TMR_TickCounterFrequencyGet());
                    _changeState(STATE_WAIT_FOR_NETWORK);
                }
                else if(TCPIP_SNTP_ConnectionInitiate() == SNTP_RES_OK)
                {
                    SYS_PRINT("INET: Initiated NTP request.\r\n");
                }
            }
            break;
        }

        case STATE_DONE:
            break;
    }
}
コード例 #7
0
ファイル: parser_diff.hpp プロジェクト: danfis/qshowdiff
 void _start()
     { if (_matchLine(THunk)) _changeState(SHunk); }
コード例 #8
0
void SpawnDiggerTile::_processInputEvent( int nEventID )
{
	if( nEventID == E_SDE_DEGENERATE )
		_changeState( E_SDS_SOIL );
}
コード例 #9
0
void SSMLoadOnlineConfig_Tasks(void)
{
    switch(_state)
    {
        case STATE_NEEDS_MORE_CONFIG:
            // TODO: what do we do then? Display on status page?
            break;

        case STATE_ACTIVATING:
        {
            if(APP_SERIALFLASH_IsReady())
            {
                APP_Activation_Tasks();

                switch(APP_Activation_State())
                { // REVIEW: don't check internal state, but via test function
                    case APP_ACTIVATION_BARE_DONE:
                        if(strcmp(appGWActivationData.configuration.key, "") == 0)
                        {
                            FATAL("Activation done, but key not filled");
                        }

                        SYS_PRINT("\r\nCNFG: Valid key, proceeding\r\n");
                        _changeState(STATE_ERASING_ACTIVATION_KEY);
                        break;

                    case APP_ACTIVATION_BARE_WAS_ACTIVATED:
                        // invalid gateway id, wipe id, start over.
                        SYS_PRINT("\r\nCNFG: Was already activated, wait for a key to be configured\r\n");
                        _changeState(STATE_NEEDS_MORE_CONFIG);
                        break;

                    case APP_ACTIVATION_BARE_NON_EXISTING_ID:
                        SYS_PRINT("\r\nCNFG: Non existing ID, please register this ID with The Things Network\r\n");
                        _changeState(STATE_NEEDS_MORE_CONFIG);
                        break;

                    case APP_ACTIVATION_BARE_ERROR:
                        SYS_PRINT("\r\nCNFG: Activation failed\r\n");
                        ErrorMessageWarning_Set(ERROR_MESSAGE_WARNING_HTTP_COMMUNICATION_FAILURE_ACTIVATION);
                        _changeState(STATE_COMMUNICATION_ERROR);
                        break;
                }
            }
            break;
        }

        case STATE_ERASING_ACTIVATION_KEY:
            if(APP_SERIALFLASH_IsReady())
            {
                _changeState(STATE_STORING_ACTIVATION_KEY);
            }
            break;

        case STATE_STORING_ACTIVATION_KEY:
            if(APP_SERIALFLASH_IsReady())
            {
                SYS_PRINT("\r\nCNFG: Gateway Activated\r\n");
                _changeState(STATE_DOWNLOAD_LORA_CONFIG);
            }
            break;

        case STATE_DOWNLOAD_LORA_CONFIG:
            APP_Configuration_Tasks();

            switch(APP_Configuration_State())
            { // REVIEW: don't check internal state, but via test function
                case APP_CONFIGURATION_DONE:
                    if(appGWActivationData.locked)
                    {
                        _changeState(STATE_DOWNLOAD_FREQPLAN);
                    }
                    else
                    {
                        _changeState(STATE_LOCK_ACTIVATION);
                    }
                    break;

                case APP_CONFIGURATION_INCOMPLETE:
                    _changeState(STATE_NEEDS_MORE_CONFIG);
                    break;

                case APP_CONFIGURATION_NON_EXISTING_ID:
                    // invalid gateway id, wipe id, start over.
                    SYS_PRINT("\r\nCNFG: Non existing gateway ID, wiping and starting over\r\n");
                    appGWActivationData.configuration.id[0]  = '\0';
                    appGWActivationData.configuration.key[0] = '\0';
                    _changeState(STATE_NEEDS_MORE_CONFIG);
                    break;

                case APP_CONFIGURATION_KEY_FAILURE:
                    // invalid gateway key, wipe key start over.
                    SYS_PRINT("\r\nCNFG: Invalid gateway key, wiping and starting over\r\n");
                    appGWActivationData.configuration.key[0] = '\0';
                    _changeState(STATE_ACTIVATING);
                    break;

                case APP_CONFIGURATION_SERVER_BUSY:
                    if(SYS_TMR_TickCountGet() - reconnectDelayStartTick >=
                       SYS_TMR_TickCounterFrequencyGet() *
                           RECONNECT_DELAY_TIMEOUT) // REVIEW: use something like isElapsed function
                    {
                        SYS_PRINT("\r\nCNFG: Server busy, retry\r\n");
                        _changeState(STATE_DOWNLOAD_LORA_CONFIG);
                    }
                    break;

                case APP_CONFIGURATION_ERROR:
                    SYS_PRINT("\r\nCNFG: Downloading gateway configuration failed\r\n");
                    _changeState(STATE_COMMUNICATION_ERROR);
                    ErrorMessageWarning_Set(ERROR_MESSAGE_WARNING_HTTP_COMMUNICATION_FAILURE_CONFIGURATION);
                    break;

                default:
                    break;
            }
            break;

        case STATE_LOCK_ACTIVATION:
            if(APP_SERIALFLASH_IsReady())
            {
                SYS_PRINT("\r\nCNFG: Gateway activation locked\r\n");
                _changeState(STATE_DOWNLOAD_FREQPLAN);
            }
            break;

        case STATE_DOWNLOAD_FREQPLAN:
            // Fetch lora module configuration
            if(SYS_TMR_TickCountGet() - freqDelayStartTick <= SYS_TMR_TickCounterFrequencyGet() * 2)
            {
                break; // take a little break after the settings fetch to be nice on the TTN server
            }

            APP_FreqPlan_Tasks();

            switch(APP_FreqPlan_State())
            { // REVIEW: don't check internal state, but via test function
                case APP_FREQPLAN_DONE:
                    _changeState(STATE_START_LORA_MODULE);
                    break;

                case APP_FREQPLAN_FAILURE:
                case APP_FREQPLAN_SERVER_BUSY:
                    SYS_PRINT("\r\nCNFG: Server busy/failure, retry\r\n");
                    _changeState(STATE_DOWNLOAD_FREQPLAN);
                    break;

                case APP_FREQPLAN_ERROR:
                    SYS_PRINT("\r\nCNFG: Downloading frequency plan failed\r\n");
                    ErrorMessageWarning_Set(ERROR_MESSAGE_WARNING_HTTP_COMMUNICATION_FAILURE_FREQPLAN);
                    _changeState(STATE_COMMUNICATION_ERROR);
                    break;
            }
            break;

        case STATE_START_LORA_MODULE:
            if(APP_LORA_GET_APP_STATE() ==
               APP_LORA_POLL_UART) // REVIEW: don't check internal state, but via test function
            {
                _changeState(STATE_DONE);
            }

        case STATE_COMMUNICATION_ERROR:
            break;

        case STATE_DONE:
            break;
    }
}