Register() { REPO *addr; int x; int id = semget(SEM_REPO, 1, 0666 | IPC_CREAT | IPC_EXCL); //printf("%d\n", id); if(id == -1) { sem_rep_id = semget(SEM_REPO, 1, 0666 ); semctl(sem_rep_id, 0, GETVAL, x); SemOperation(sem_rep_id, 0, -1); shared_id = shmget(ID_REPO, sizeof(REPO), 0666); sem_log_id = semget(SEM_LOG, 1, 0666); addr = (REPO*)shmat(shared_id, NULL, 0); (*addr).active_servers = (*addr).active_servers + 1; (*addr).servers[(*addr).active_servers - 1].client_msgid = ownMSG; (*addr).servers[(*addr).active_servers - 1].server_msgid = servers_id; (*addr).servers[(*addr).active_servers - 1].clients = 0; SortServers(addr); printf("x1\n"); shmdt(addr); printf("x1\n"); SemOperation(sem_rep_id, 0, 1); } else { printf("x2\n"); sem_rep_id = id; semctl(sem_rep_id, 0, SETVAL, 0); x = semctl(sem_rep_id, 0, GETVAL, x); shared_id = shmget(ID_REPO, sizeof(REPO), 0666 | IPC_CREAT); addr = (REPO*)shmat(shared_id, NULL, 0); (*addr).active_clients = 0; (*addr).active_rooms = 0; (*addr).active_servers = 1; (*addr).servers[0].client_msgid = ownMSG; (*addr).servers[0].server_msgid = servers_id; (*addr).servers[0].clients = 0; sem_log_id = semget(SEM_LOG, 1, 0666 | IPC_CREAT); semctl(sem_log_id, 0, SETVAL, 1); shmdt(addr); SemOperation(sem_rep_id, 0, 1); x = semctl(sem_rep_id, 0, GETVAL, x); } //semctl(sem_rep_id, 0, IPC_RMID, 0); printf("x\n"); }
void CFolderJoin::UpdateGetServices(HSURFACE hDestSurf) { int nState = GetGameSpyClientMgr()->GetState(); switch (nState) { case sl_idle: // done updating { SortServers(); m_bNeedServerSorting = FALSE; HSTRING hStr = g_pLTClient->FormatString(IDS_STATUS_QUERYDONE); SetDummyStatusState(hStr, 1000, FSS_IDLE); g_pLTClient->FreeString(hStr); break; } case sl_listxfer: // getting list { HSTRING hStr = g_pLTClient->FormatString(IDS_STATUS_GETLIST); SetStatusText(hStr); g_pLTClient->FreeString(hStr); break; } case sl_lanlist: // searching lan { HSTRING hStr = g_pLTClient->FormatString(IDS_STATUS_GETLIST); SetStatusText(hStr); g_pLTClient->FreeString(hStr); break; } case sl_querying: // querying servers { HSTRING hStr = g_pLTClient->FormatString(IDS_STATUS_QUERY, GetGameSpyClientMgr()->GetProgress(), m_nNumServersListed); SetStatusText(hStr); g_pLTClient->FreeString(hStr); break; } } }
void CFolderJoin::Update(HSURFACE hDestSurf) { // Let the GameSpy client manager update... GetGameSpyClientMgr()->Update(); // Update based on our current state... switch (m_nState) { case FSS_IDLE: { UpdateIdle(hDestSurf); break; } case FSS_GETSERVICES: { UpdateGetServices(hDestSurf); break; } case FSS_GETPINGS: { UpdateGetPings(hDestSurf); break; } case FSS_GETALLDATA: { UpdateGetAllData(hDestSurf); break; } case FSS_GETSELPING: { UpdateGetSelPing(hDestSurf); break; } case FSS_DUMMYSTATUS: { UpdateDummyStatus(hDestSurf); break; } } // Update our sub menus... UpdateLists(); // Check for required sorting... if (m_bNeedServerSorting) { m_bNeedServerSorting = LTFALSE; SortServers(); } // Enable or disable the join control as necessary... m_pJoin->Enable((GetCurGameServerHandle() != LTNULL)); }
uint32 CFolderJoin::OnCommand(uint32 dwCommand, uint32 dwParam1, uint32 dwParam2) { switch(dwCommand) { case CMD_SELECT_SERVER: { int nIndex = m_pServerList->GetSelectedItem(); void* pGame = LTNULL; if (nIndex != CListCtrl::kNoSelection) { pGame = (void*)m_pServerList->GetControl(nIndex)->GetParam1(); } if (pGame != GetCurGameServerHandle()) { SetCurGameServerHandle(pGame); SetState(FSS_GETALLDATA); } UpdatePlayers(TRUE); } break; case CMD_REFRESH_SERVERS: { SetState(FSS_GETSERVICES); break; } case CMD_REPING_SERVERS: { //SetState(FSS_GETPINGS); break; } case CMD_VERSION_FILTER: { m_nVersionFilter = !m_nVersionFilter; m_pVersionFilter->UpdateData(LTFALSE); ForceNextUpdate(); } break; case CMD_GAME_FILTER: { m_nGameFilter++; if (m_nGameFilter > NGT_FILTER_LAST) m_nGameFilter = 0; m_pGameFilter->UpdateData(LTFALSE); ForceNextUpdate(); } break; case CMD_POP_FILTER: { m_nPopFilter++; if (m_nPopFilter > POP_FILTER_LAST) m_nPopFilter = 0; m_pPopFilter->UpdateData(LTFALSE); ForceNextUpdate(); } break; case CMD_SORT_SERV_NAME: { SetServerSort(FSS_SORT_NAME); SortServers(); } break; case CMD_SORT_SERV_PLAYERS: { SetServerSort(FSS_SORT_PLAYERS); SortServers(); } break; case CMD_SORT_SERV_PING: { SetServerSort(FSS_SORT_PING); SortServers(); } break; case CMD_SORT_SERV_GAME: { SetServerSort(FSS_SORT_GAME); SortServers(); } break; case CMD_SORT_SERV_MAP: { SetServerSort(FSS_SORT_MAP); SortServers(); } break; case CMD_SORT_PLYR_NAME: { SetPlayerSort(FSS_SORT_NAME); SortPlayers(); } break; case CMD_SORT_PLYR_SCORE: { SetPlayerSort(FSS_SORT_FRAGS); SortPlayers(); } break; case CMD_SORT_PLYR_PING: { SetPlayerSort(FSS_SORT_PING); SortPlayers(); } break; case CMD_EDIT_PASS: { SetCapture(LTNULL); m_pPassEdit->UpdateData(); RemoveFixedControl(m_pPassEdit); RemoveFixedControl(m_pPassLabel); RemoveFixedControl(m_pPassBack); m_bAskingForPassword = LTFALSE; ForceMouseUpdate(); JoinCurGame(LTTRUE); } break; case CMD_JOIN: { CGameSpyServer* pGame = GetGameSpyClientMgr()->GetServerFromHandle(m_pCurServerHandle); if (g_pGameClientShell->IsInWorld() && pGame) { if (IsCurrentGame(pGame)) { HLOCALOBJ hPlayerObj = g_pLTClient->GetClientObject(); if (g_pGameClientShell->IsInWorld() && hPlayerObj) { g_pInterfaceMgr->ChangeState(GS_PLAYING); } } else { HSTRING hString = g_pLTClient->FormatString(IDS_ENDCURRENTGAME); g_pInterfaceMgr->ShowMessageBox(hString,LTMB_YESNO,JoinCallBack,this); g_pLTClient->FreeString(hString); } } else { JoinCurGame(); } } break; default: return CBaseFolder::OnCommand(dwCommand,dwParam1,dwParam2); } return 1; };