GameStatus getStatus() { string name; int year; time_t timer, nextRound; wchar_t nameyearstr[MAX_CHAR_LEN]; wchar_t timestr[MAX_CHAR_LEN]; GetWindowText(nameyearH,nameyearstr,sizeof(nameyearstr)); GetWindowText(timeH,timestr,sizeof(timestr)); parseNameYear(nameyearstr, name, year); parseTimer(timestr, timer, nextRound); GameStatus gs = GameStatus(name, year, nextRound, nPlayer); for (int i = 0; i<nPlayer; ++i) { string pname; bool finishedTurn; Status status; int score; wchar_t * playerstr = new wchar_t[MAX_CHAR_LEN]; wchar_t * pingstr = new wchar_t[MAX_CHAR_LEN]; wchar_t * scorestr = new wchar_t[MAX_CHAR_LEN]; GetWindowText(PlayerH[i].nameH, playerstr, MAX_CHAR_LEN); GetWindowText(PlayerH[i].pingH, pingstr, MAX_CHAR_LEN); GetWindowText(PlayerH[i].scoreH, scorestr, MAX_CHAR_LEN); parsePlayer(playerstr, pname, finishedTurn); parsePing(pingstr, status); parseScore(scorestr, score, status); delete[] playerstr; delete[] pingstr; delete[] scorestr; //Player p = new Player(pname, finishedTurn, status, score); gs.setPlayer(i, pname, finishedTurn, status, score); } return gs; }
////////////////////////////// // Parse an IRC command (private) void IRCClient::parseCommand(const IRCClient::IRCCommand &cmd) { /*printf("IRC: sender '%s' cmd '%s'", cmd.sender.c_str(), cmd.cmd.c_str() ); for( size_t i=0; i<cmd.params.size(); i++ ) printf(" param %i '%s'", i, cmd.params[i].c_str()); printf("\n");*/ // Process depending on the command bool fail = false; int num_command = from_string<int>(cmd.cmd, fail); // String commands if (fail) { if (cmd.cmd == "PING") parsePing(cmd); else if (cmd.cmd == "MODE") parseMode(cmd); else if (cmd.cmd == "PRIVMSG") parsePrivmsg(cmd); else if (cmd.cmd == "KICK") parseKicked(cmd); else if (cmd.cmd == "PART" || cmd.cmd == "QUIT") parseDropped(cmd); else if (cmd.cmd == "JOIN") parseJoin(cmd); else if (cmd.cmd == "NICK") parseNick(cmd); else if (cmd.cmd == "NOTICE") parseNotice(cmd); else if (cmd.cmd == "ERROR") parseError(cmd); else warnings("IRC: unknown command " + cmd.cmd + "\n"); // Numeric commands } else { switch (num_command) { // Nick in use case LIBIRC_RFC_ERR_NICKNAMEINUSE: parseNickInUse(cmd); break; // List of names case LIBIRC_RFC_RPL_NAMREPLY: parseNameReply(cmd); break; // End of name list case LIBIRC_RFC_RPL_ENDOFNAMES: parseEndOfNames(cmd); break; case LIBIRC_RFC_RPL_AWAY: parseAway(cmd); break; case LIBIRC_RFC_RPL_WHOISUSER: parseWhois(cmd); break; case LIBIRC_RFC_RPL_ENDOFWHOIS: parseEndOfWhois(cmd); break; case LIBIRC_RFC_RPL_TOPIC: parseTopic(cmd); break; // Message of the day case LIBIRC_RFC_RPL_MOTDSTART: case LIBIRC_RFC_RPL_MOTD: case LIBIRC_RFC_RPL_ENDOFMOTD: // Message of the day (ignored currently) break; // Messages sent upon a successful join case LIBIRC_RFC_RPL_WELCOME: case LIBIRC_RFC_RPL_YOURHOST: case LIBIRC_RFC_RPL_CREATED: case LIBIRC_RFC_RPL_MYINFO: // Quite useless stuff... break; default: {} // Just ignore, there are many "pro" commands that we don't need } } }
void ProtocolGame::parseMessage(InputMessage& msg) { try { while(!msg.eof()) { int opt = msg.getU8(); switch(opt) { case Proto::GameServerInitGame: parsePlayerLogin(msg); break; case Proto::GameServerGMActions: parseGMActions(msg); break; case Proto::GameServerLoginError: parseLoginError(msg); break; case Proto::GameServerLoginAdvice: parseFYIMessage(msg); break; case Proto::GameServerLoginWait: parseWaitList(msg); break; case Proto::GameServerPing: parsePing(msg); break; //case Proto::GameServerChallange: case Proto::GameServerDead: parseDeath(msg); break; case Proto::GameServerFullMap: parseMapDescription(msg); break; case Proto::GameServerMapTopRow: parseMoveNorth(msg); break; case Proto::GameServerMapRightRow: parseMoveEast(msg); break; case Proto::GameServerMapBottomRow: parseMoveSouth(msg); break; case Proto::GameServerMapLeftRow: parseMoveWest(msg); break; case Proto::GameServerTileData: parseUpdateTile(msg); break; case Proto::GameServerCreateOnMap: parseTileAddThing(msg); break; case Proto::GameServerChangeOnMap: parseTileTransformThing(msg); break; case Proto::GameServerDeleteOnMap: parseTileRemoveThing(msg); break; case Proto::GameServerMoveCreature: parseCreatureMove(msg); break; case Proto::GameServerOpenContainer: parseOpenContainer(msg); break; case Proto::GameServerCloseContainer: parseCloseContainer(msg); break; case Proto::GameServerCreateContainer: parseContainerAddItem(msg); break; case Proto::GameServerChangeInContainer: parseContainerUpdateItem(msg); break; case Proto::GameServerDeleteInContainer: parseContainerRemoveItem(msg); break; case Proto::GameServerSetInventory: parseAddInventoryItem(msg); break; case Proto::GameServerDeleteInventory: parseRemoveInventoryItem(msg); break; case Proto::GameServerNpcOffer: parseOpenShopWindow(msg); break; case Proto::GameServerPlayerGoods: parsePlayerCash(msg); break; case Proto::GameServerCloseNpcTrade: parseCloseShopWindow(msg); break; case Proto::GameServerOwnOffer: parseSafeTradeRequest(msg); break; case Proto::GameServerCounterOffer: parseSafeTradeRequest(msg); break; case Proto::GameServerCloseTrade: parseSafeTradeClose(msg); break; case Proto::GameServerAmbient: parseWorldLight(msg); break; case Proto::GameServerGraphicalEffect: parseMagicEffect(msg); break; case Proto::GameServerTextEffect: parseAnimatedText(msg); break; case Proto::GameServerMissleEffect: parseDistanceMissile(msg); break; case Proto::GameServerMarkCreature: parseCreatureSquare(msg); break; //case Proto::GameServerTrappers case Proto::GameServerCreatureHealth: parseCreatureHealth(msg); break; case Proto::GameServerCreatureLight: parseCreatureLight(msg); break; case Proto::GameServerCreatureOutfit: parseCreatureOutfit(msg); break; case Proto::GameServerCreatureSpeed: parseCreatureSpeed(msg); break; case Proto::GameServerCreatureSkull: parseCreatureSkulls(msg); break; case Proto::GameServerCreatureParty: parseCreatureShields(msg); break; // case Proto::GameServerCreatureUnpass case Proto::GameServerEditText: parseItemTextWindow(msg); break; case Proto::GameServerEditList: parseHouseTextWindow(msg); break; case Proto::GameServerPlayerData: parsePlayerStats(msg); break; case Proto::GameServerPlayerSkills: parsePlayerSkills(msg); break; case Proto::GameServerPlayerState: parsePlayerIcons(msg); break; case Proto::GameServerClearTarget: parsePlayerCancelAttack(msg); break; //case Proto::GameServerSpellDelay: //case Proto::GameServerSpellGroupDelay: case Proto::GameServerTalk: parseCreatureSpeak(msg); break; case Proto::GameServerChannels: parseChannelList(msg); break; case Proto::GameServerOpenChannel: parseOpenChannel(msg); break; case Proto::GameServerPrivateChannel: parseOpenPrivatePlayerChat(msg); break; case Proto::GameServerRuleViolationChannel: msg.getU16(); break; case Proto::GameServerRuleViolationRemove: msg.getString(); break; case Proto::GameServerRuleViolationCancel: msg.getString(); break; case Proto::GameServerRuleViolationLock: break; case Proto::GameServerOpenOwnChannel: parseCreatePrivateChannel(msg); break; case Proto::GameServerCloseChannel: parseClosePrivateChannel(msg); break; case Proto::GameServerMessage: parseTextMessage(msg); break; case Proto::GameServerSnapBack: parseCancelWalk(msg); break; //case Proto::GameServerWait: case Proto::GameServerTopFloor: parseFloorChangeUp(msg); break; case Proto::GameServerBottomFloor: parseFloorChangeDown(msg); break; case Proto::GameServerOutfit: parseOutfitWindow(msg); break; case Proto::GameServerBuddyData: parseVipState(msg); break; case Proto::GameServerBuddyLogin: parseVipLogin(msg); break; case Proto::GameServerBuddyLogout: parseVipLogout(msg); break; case Proto::GameServerTutorialHint: parseShowTutorial(msg); break; case Proto::GameServerAutomapFlag: parseAddMarker(msg); break; case Proto::GameServerQuestLog: parseQuestList(msg); break; case Proto::GameServerQuestLine: parseQuestPartList(msg); break; //case Proto::GameServerChannelEvent: //case Proto::GameServerObjectInfo: //case Proto::GameServerPlayerInventory: default: Fw::throwException("unknown opt byte ", (int)opt); break; } } } catch(Exception& e) { logTraceError(e.what()); } }