void
NetGameClient::ExecFrame()
{
	if (local_player) {
		if (local_player->GetObjID() == 0) {
			SendJoinRequest();
		}

		else if (active) {
			// check health of server:
			NetPeer* server_peer = link->FindPeer(server_id);
			if (server_peer && (NetLayer::GetUTC() - server_peer->LastReceiveTime() > 15)) {
				NetMsg net_disco(0, NET_DISCONNECT, 0, 0, 0);
				DoDisconnect(&net_disco);
			}

			// if server is still there,
			else if (server_peer) {

				// check if any old join announcements still need to be processed:
				ListIter<NetJoinAnnounce> iter = join_backlog;
				while (++iter) {
					NetJoinAnnounce* join_ann = iter.value();

					if (DoJoinBacklog(join_ann)) {
						iter.removeItem();
						delete join_ann;
					}
				}
			}
		}
	}

	NetGame::ExecFrame();
}
NetGameClient::NetGameClient()
: server_id(0), join_req_time(0)
{
	Print("Constructing NetGameClient\n");

	NetHost me;
	Text    server_name;
	WORD    port = 11101;

	NetClientConfig* ncc = NetClientConfig::GetInstance();
	if (ncc) {
		NetServerInfo* info = ncc->GetSelectedServer();

		if (info) {
			server_name = info->hostname;
			port        = info->gameport;
		}
	}

	if (server_name.length() && port > 0) {
		Print("  '%s' is a client of '%s'\n", me.Name(), server_name);
		link = new(__FILE__,__LINE__) NetLink;
		server_id = link->AddPeer(NetAddr(server_name, port));
		SendJoinRequest();
	}
	else if (port == 0) {
		Print("  '%s' invalid game port number %d\n", me.Name(), port);
	}
	else {
		Print("  '%s' is a client without a server\n", me.Name());
	}
}
Пример #3
0
void GatewayStack::ProcessJoinStatus()
{
    if (state == stOperational)
        return;

    LOG_INFO_APP("Join flow timeouted. Resending join request.");
    SendJoinRequest();
}
Пример #4
0
void GatewayStack::NMSessionSucceeded()
{
	LOG_INFO_APP("session to NM succeeded.");

	datalink.CreateNeighborSession(NetworkManager_UniqueID(), NetworkManager_Nickname());
	datalink.SetNeighborSession(NetworkManager_UniqueID(), clientNM->ActiveSession());

	SendJoinRequest();
	state = stJoining;
}
Пример #5
0
uint8 Process_Event()
{
    uint8 current_event;
    current_event = Pop_T();
    switch(current_event)
    {
      case EVENT_BEACON_HANDLER:
        BeaconHandler(DataRecvBuffer);
        break;
      case EVENT_JOINREQUESTACK_HANDLER:
        JoinRequestACKHandler();
        break;
      case EVENT_JOINREQUEST_SEND:
        SendJoinRequest();
        break;
      case EVENT_DATA_SEND:
        DataSend();
        break;
      case EVENT_DATAACK_HANDLER:
        DataACKHandler();
        break;
      case EVENT_WAKE_A7139:
        A7139_WakeToRecv();
        break;
      case EVENT_CSMA_RESEND:
        CSMADataResend();
        break;
      case EVENT_COLLECT_DATA:
        CollectData();
        break;
      case EVENT_IDENTIFY_CAR:
        IdentifyCar();
        break;
      case EVENT_REJOIN_HANDLER:
        ReJoinHandler();
        break;
    }
    return current_event;
}