/** ** ParseBuffer: Handler client/server interaction. ** ** @param session Current session. */ static void ParseBuffer(Session *session) { char *buf; if (!session || session->Buffer[0] == '\0') { return; } buf = session->Buffer; if (!session->UserData.LoggedIn) { if (!strncmp(buf, "USER ", 5)) { ParseUser(session, buf + 5); } else if (!strncmp(buf, "REGISTER ", 9)) { ParseRegister(session, buf + 9); } else { fprintf(stderr, "Unknown command: %s\n", session->Buffer); Send(session, "ERR_BADCOMMAND\n"); } } else { if (!strncmp(buf, "USER ", 5) || !strncmp(buf, "REGISTER ", 9)) { Send(session, "ERR_ALREADYLOGGEDIN\n"); } else if (!strncmp(buf, "CREATEGAME ", 11)) { ParseCreateGame(session, buf + 11); } else if (!strcmp(buf, "CANCELGAME") || !strncmp(buf, "CANCELGAME ", 11)) { ParseCancelGame(session, buf + 10); } else if (!strcmp(buf, "STARTGAME") || !strncmp(buf, "STARTGAME ", 10)) { ParseStartGame(session, buf + 9); } else if (!strcmp(buf, "LISTGAMES") || !strncmp(buf, "LISTGAMES ", 10)) { ParseListGames(session, buf + 9); } else if (!strncmp(buf, "JOINGAME ", 9)) { ParseJoinGame(session, buf + 9); } else if (!strcmp(buf, "PARTGAME") || !strncmp(buf, "PARTGAME ", 9)) { ParsePartGame(session, buf + 8); } else if (!strncmp(buf, "ENDGAME ", 8)) { ParseEndGame(session, buf + 8); } else if (!strncmp(buf, "MSG ", 4)) { ParseMsg(session, buf + 4); } else { fprintf(stderr, "Unknown command: %s\n", session->Buffer); Send(session, "ERR_BADCOMMAND\n"); } } }
FName FMapInfoParser::CheckEndSequence() { const char *seqname = NULL; if (sc.Compare("endgame")) { if (!sc.CheckString("{")) { // Make Demon Eclipse work again sc.UnGet(); goto standard_endgame; } return ParseEndGame(); } else if (strnicmp (sc.String, "EndGame", 7) == 0) { switch (sc.String[7]) { case '1': seqname = "Inter_Pic1"; break; case '2': seqname = "Inter_Pic2"; break; case '3': seqname = "Inter_Bunny"; break; case 'C': seqname = "Inter_Cast"; break; case 'W': seqname = "Inter_Underwater"; break; case 'S': seqname = "Inter_Strife"; break; standard_endgame: default: seqname = "Inter_Pic3"; break; } } else if (sc.Compare("endpic")) { ParseComma(); sc.MustGetString (); FString seqname; seqname << "@EndPic_" << sc.String; FIntermissionDescriptor *desc = new FIntermissionDescriptor; FIntermissionAction *action = new FIntermissionAction; action->mBackground = sc.String; desc->mActions.Push(action); ReplaceIntermission(seqname, desc); return FName(seqname); } else if (sc.Compare("endbunny")) { seqname = "Inter_Bunny"; } else if (sc.Compare("endcast")) { seqname = "Inter_Cast"; } else if (sc.Compare("enddemon")) { seqname = "Inter_Demonscroll"; } else if (sc.Compare("endchess")) { seqname = "Inter_Chess"; } else if (sc.Compare("endunderwater")) { seqname = "Inter_Underwater"; } else if (sc.Compare("endbuystrife")) { seqname = "Inter_BuyStrife"; } else if (sc.Compare("endtitle")) { seqname = "Inter_Titlescreen"; } else if (sc.Compare("endsequence")) { ParseComma(); sc.MustGetString(); seqname = sc.String; } if (seqname != NULL) { return FName(seqname); } return NAME_None; }