annotate sources/parser.cpp @ 4:a7051ac7118b

added primary parser implementation renamed some functions to well-formed format bool => false, pointers => NULL removed useless eTime()
author Vlad Glagolev <enqlave@gmail.com>
date Thu, 24 Jan 2008 19:38:34 +0300
parents 19227b0b7cc1
children 9be05a31b7f9
rev   line source
0
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
1 /**
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
2 * parser.cpp (2007-05-13)
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
3 *
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
4 * -- CABAL -- irc commands parser
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
5 *
2
19227b0b7cc1 .h => .hpp for the headers
Vlad Glagolev <enqlave@gmail.com>
parents: 0
diff changeset
6 * Copyright (c) 2007-2008 Vlad Glagolev <enqlave@gmail.com>
0
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
7 * All rights reserved.
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
8 *
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
9 * Permission to use, copy, modify, and distribute this software for any
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
10 * purpose with or without fee is hereby granted, provided that the above
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
11 * copyright notice and this permission notice appear in all copies.
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
12 *
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
13 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
14 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
15 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
16 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
17 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
18 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
19 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
20 */
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
21
2
19227b0b7cc1 .h => .hpp for the headers
Vlad Glagolev <enqlave@gmail.com>
parents: 0
diff changeset
22 #include "cabal.hpp" // required: parser.hpp
0
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
23
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
24 Parser::Parser(Connection *S, string parsing)
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
25 {
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
26 if (parsing.substr(0, 6) == "PING :") {
2
19227b0b7cc1 .h => .hpp for the headers
Vlad Glagolev <enqlave@gmail.com>
parents: 0
diff changeset
27 parsing[1] = 'O';
19227b0b7cc1 .h => .hpp for the headers
Vlad Glagolev <enqlave@gmail.com>
parents: 0
diff changeset
28 S->sendMsg(parsing);
4
a7051ac7118b added primary parser implementation
Vlad Glagolev <enqlave@gmail.com>
parents: 2
diff changeset
29 } else {
a7051ac7118b added primary parser implementation
Vlad Glagolev <enqlave@gmail.com>
parents: 2
diff changeset
30 char *line = new char[parsing.length() + 1];
a7051ac7118b added primary parser implementation
Vlad Glagolev <enqlave@gmail.com>
parents: 2
diff changeset
31
a7051ac7118b added primary parser implementation
Vlad Glagolev <enqlave@gmail.com>
parents: 2
diff changeset
32 strcpy(line, parsing.c_str());
a7051ac7118b added primary parser implementation
Vlad Glagolev <enqlave@gmail.com>
parents: 2
diff changeset
33
a7051ac7118b added primary parser implementation
Vlad Glagolev <enqlave@gmail.com>
parents: 2
diff changeset
34 char *who = strtok(line, " ");
a7051ac7118b added primary parser implementation
Vlad Glagolev <enqlave@gmail.com>
parents: 2
diff changeset
35 char *what = strtok(NULL, " ");
a7051ac7118b added primary parser implementation
Vlad Glagolev <enqlave@gmail.com>
parents: 2
diff changeset
36 char *where = strtok(NULL, " ");
a7051ac7118b added primary parser implementation
Vlad Glagolev <enqlave@gmail.com>
parents: 2
diff changeset
37 char *message = strtok(NULL, "\n");
a7051ac7118b added primary parser implementation
Vlad Glagolev <enqlave@gmail.com>
parents: 2
diff changeset
38
a7051ac7118b added primary parser implementation
Vlad Glagolev <enqlave@gmail.com>
parents: 2
diff changeset
39 if (strchr(who, '!')) {
a7051ac7118b added primary parser implementation
Vlad Glagolev <enqlave@gmail.com>
parents: 2
diff changeset
40 alienID = strchr(who, '!');
a7051ac7118b added primary parser implementation
Vlad Glagolev <enqlave@gmail.com>
parents: 2
diff changeset
41 alienID = alienID.substr(1);
a7051ac7118b added primary parser implementation
Vlad Glagolev <enqlave@gmail.com>
parents: 2
diff changeset
42 }
a7051ac7118b added primary parser implementation
Vlad Glagolev <enqlave@gmail.com>
parents: 2
diff changeset
43
a7051ac7118b added primary parser implementation
Vlad Glagolev <enqlave@gmail.com>
parents: 2
diff changeset
44 if (strtok(who, "!"))
a7051ac7118b added primary parser implementation
Vlad Glagolev <enqlave@gmail.com>
parents: 2
diff changeset
45 alien = strtok(who, "!");
a7051ac7118b added primary parser implementation
Vlad Glagolev <enqlave@gmail.com>
parents: 2
diff changeset
46
a7051ac7118b added primary parser implementation
Vlad Glagolev <enqlave@gmail.com>
parents: 2
diff changeset
47 alienAction = what;
a7051ac7118b added primary parser implementation
Vlad Glagolev <enqlave@gmail.com>
parents: 2
diff changeset
48
a7051ac7118b added primary parser implementation
Vlad Glagolev <enqlave@gmail.com>
parents: 2
diff changeset
49 if (*where == ':')
a7051ac7118b added primary parser implementation
Vlad Glagolev <enqlave@gmail.com>
parents: 2
diff changeset
50 alienLocation = ++where;
a7051ac7118b added primary parser implementation
Vlad Glagolev <enqlave@gmail.com>
parents: 2
diff changeset
51 else {
a7051ac7118b added primary parser implementation
Vlad Glagolev <enqlave@gmail.com>
parents: 2
diff changeset
52 alienLocation = where;
0
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
53
4
a7051ac7118b added primary parser implementation
Vlad Glagolev <enqlave@gmail.com>
parents: 2
diff changeset
54 if (message) {
a7051ac7118b added primary parser implementation
Vlad Glagolev <enqlave@gmail.com>
parents: 2
diff changeset
55 if (alienLocation == S->nick)
a7051ac7118b added primary parser implementation
Vlad Glagolev <enqlave@gmail.com>
parents: 2
diff changeset
56 alienLocation = alien;
a7051ac7118b added primary parser implementation
Vlad Glagolev <enqlave@gmail.com>
parents: 2
diff changeset
57
a7051ac7118b added primary parser implementation
Vlad Glagolev <enqlave@gmail.com>
parents: 2
diff changeset
58 alienMessage = (*message == ':') ? ++message: message;
a7051ac7118b added primary parser implementation
Vlad Glagolev <enqlave@gmail.com>
parents: 2
diff changeset
59
a7051ac7118b added primary parser implementation
Vlad Glagolev <enqlave@gmail.com>
parents: 2
diff changeset
60 if (*message == CABAL->commander && ++message) {
a7051ac7118b added primary parser implementation
Vlad Glagolev <enqlave@gmail.com>
parents: 2
diff changeset
61 if (strchr(message, ' ')) {
a7051ac7118b added primary parser implementation
Vlad Glagolev <enqlave@gmail.com>
parents: 2
diff changeset
62 alienCommand = strtok(message, " ");
a7051ac7118b added primary parser implementation
Vlad Glagolev <enqlave@gmail.com>
parents: 2
diff changeset
63 alienMessage = strtok(NULL, "\n");
a7051ac7118b added primary parser implementation
Vlad Glagolev <enqlave@gmail.com>
parents: 2
diff changeset
64 } else
a7051ac7118b added primary parser implementation
Vlad Glagolev <enqlave@gmail.com>
parents: 2
diff changeset
65 alienCommand = message;
a7051ac7118b added primary parser implementation
Vlad Glagolev <enqlave@gmail.com>
parents: 2
diff changeset
66 }
a7051ac7118b added primary parser implementation
Vlad Glagolev <enqlave@gmail.com>
parents: 2
diff changeset
67 }
a7051ac7118b added primary parser implementation
Vlad Glagolev <enqlave@gmail.com>
parents: 2
diff changeset
68 }
a7051ac7118b added primary parser implementation
Vlad Glagolev <enqlave@gmail.com>
parents: 2
diff changeset
69
a7051ac7118b added primary parser implementation
Vlad Glagolev <enqlave@gmail.com>
parents: 2
diff changeset
70 delete[] line;
a7051ac7118b added primary parser implementation
Vlad Glagolev <enqlave@gmail.com>
parents: 2
diff changeset
71
a7051ac7118b added primary parser implementation
Vlad Glagolev <enqlave@gmail.com>
parents: 2
diff changeset
72 /* DEBUG
a7051ac7118b added primary parser implementation
Vlad Glagolev <enqlave@gmail.com>
parents: 2
diff changeset
73 cout
a7051ac7118b added primary parser implementation
Vlad Glagolev <enqlave@gmail.com>
parents: 2
diff changeset
74 << "-----------------------------------\n" \
a7051ac7118b added primary parser implementation
Vlad Glagolev <enqlave@gmail.com>
parents: 2
diff changeset
75 << "Alien: \t" << alien << endl \
a7051ac7118b added primary parser implementation
Vlad Glagolev <enqlave@gmail.com>
parents: 2
diff changeset
76 << "Alien ID:\t" << alienID << endl \
a7051ac7118b added primary parser implementation
Vlad Glagolev <enqlave@gmail.com>
parents: 2
diff changeset
77 << "Alien action:\t" << alienAction << endl \
a7051ac7118b added primary parser implementation
Vlad Glagolev <enqlave@gmail.com>
parents: 2
diff changeset
78 << "Alien location:\t" << alienLocation << endl \
a7051ac7118b added primary parser implementation
Vlad Glagolev <enqlave@gmail.com>
parents: 2
diff changeset
79 << "Alien command:\t" << alienCommand << endl \
a7051ac7118b added primary parser implementation
Vlad Glagolev <enqlave@gmail.com>
parents: 2
diff changeset
80 << "Alien message:\t" << alienMessage << endl \
a7051ac7118b added primary parser implementation
Vlad Glagolev <enqlave@gmail.com>
parents: 2
diff changeset
81 << "-----------------------------------\n";
a7051ac7118b added primary parser implementation
Vlad Glagolev <enqlave@gmail.com>
parents: 2
diff changeset
82 */ }
0
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
83 }
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
84
2
19227b0b7cc1 .h => .hpp for the headers
Vlad Glagolev <enqlave@gmail.com>
parents: 0
diff changeset
85 void Parser::Parse(Connection *S)
0
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
86 {
4
a7051ac7118b added primary parser implementation
Vlad Glagolev <enqlave@gmail.com>
parents: 2
diff changeset
87 if (alienCommand == "die" && alienID == "stealth@ru.raver")
a7051ac7118b added primary parser implementation
Vlad Glagolev <enqlave@gmail.com>
parents: 2
diff changeset
88 shut("Requested shutdown");
0
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
89 }