annotate sources/core.cpp @ 7:8d54d9fdeca3

fixed comments removed daemonization verbose strings' size() -> length()
author Vlad Glagolev <enqlave@gmail.com>
date Sun, 03 Feb 2008 21:29:41 +0300
parents 0faceb076254
children
rev   line source
0
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
1 /** core.cpp (2007-03-04)
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
2 *
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
3 * -- CABAL -- core module
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
4 *
2
19227b0b7cc1 .h => .hpp for the headers
Vlad Glagolev <enqlave@gmail.com>
parents: 0
diff changeset
5 * Copyright (c) 2007-2008 Vlad Glagolev <enqlave@gmail.com>
0
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
6 * All rights reserved.
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
7 *
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
8 * 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
9 * 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
10 * copyright notice and this permission notice appear in all copies.
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
11 *
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
12 * 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
13 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
14 * 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
15 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
16 * 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
17 * 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
18 * 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
19 */
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
20
7
8d54d9fdeca3 fixed comments
Vlad Glagolev <enqlave@gmail.com>
parents: 5
diff changeset
21 #include "cabal.hpp" // needed: core.hpp
0
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
22
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
23 Connection *C;
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
24
2
19227b0b7cc1 .h => .hpp for the headers
Vlad Glagolev <enqlave@gmail.com>
parents: 0
diff changeset
25 Core::Core():
5
0faceb076254 code clean up
Vlad Glagolev <enqlave@gmail.com>
parents: 4
diff changeset
26 pid(PID),
0
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
27 commander(COMMANDER)
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
28 {
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
29 cout << "CORE: initializing...\n";
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
30
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
31 debug = true;
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
32
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
33 now = gettime();
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
34
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
35 for (int e = 0; e < MAX_SERVERS; e++)
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
36 connections[e] = 0;
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
37
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
38 servers = 0;
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
39 }
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
40
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
41 Core::~Core()
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
42 {
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
43 for (int e = 0; e < servers; e++)
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
44 delete connections[e];
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
45
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
46 servers = 0;
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
47
2
19227b0b7cc1 .h => .hpp for the headers
Vlad Glagolev <enqlave@gmail.com>
parents: 0
diff changeset
48 remove(pid);
0
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
49
7
8d54d9fdeca3 fixed comments
Vlad Glagolev <enqlave@gmail.com>
parents: 5
diff changeset
50 if (CABAL->debug)
8d54d9fdeca3 fixed comments
Vlad Glagolev <enqlave@gmail.com>
parents: 5
diff changeset
51 cout << "CORE: shutdown complete\n";
0
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
52 }
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
53
2
19227b0b7cc1 .h => .hpp for the headers
Vlad Glagolev <enqlave@gmail.com>
parents: 0
diff changeset
54 void Core::parseCommandLine(int argc, char **argv)
0
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
55 {
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
56 for (int e = 1; e < argc; e++) {
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
57 while (1) {
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
58 if (!strcmp(argv[e], "-c") || !strcmp(argv[e], "--config")) {
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
59 if (!argv[++e])
5
0faceb076254 code clean up
Vlad Glagolev <enqlave@gmail.com>
parents: 4
diff changeset
60 shut("missing configuration file");
0
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
61
2
19227b0b7cc1 .h => .hpp for the headers
Vlad Glagolev <enqlave@gmail.com>
parents: 0
diff changeset
62 config = argv[e];
0
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
63 break;
2
19227b0b7cc1 .h => .hpp for the headers
Vlad Glagolev <enqlave@gmail.com>
parents: 0
diff changeset
64 } else if (!strcmp(argv[e], "-h") || !strcmp(argv[e], "--help")) {
19227b0b7cc1 .h => .hpp for the headers
Vlad Glagolev <enqlave@gmail.com>
parents: 0
diff changeset
65 showHelp();
0
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
66 } else if (!strcmp(argv[e], "-d") || !strcmp(argv[e], "--daemon")) {
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
67 debug = false;
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
68 break;
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
69 } else
5
0faceb076254 code clean up
Vlad Glagolev <enqlave@gmail.com>
parents: 4
diff changeset
70 shut("unknown option detected: " + (string)argv[e]);
0
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
71 }
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
72 }
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
73 }
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
74
2
19227b0b7cc1 .h => .hpp for the headers
Vlad Glagolev <enqlave@gmail.com>
parents: 0
diff changeset
75 void Core::parseConfig()
0
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
76 {
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
77 servers = -1;
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
78
4
a7051ac7118b added primary parser implementation
Vlad Glagolev <enqlave@gmail.com>
parents: 2
diff changeset
79 C = NULL;
0
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
80
2
19227b0b7cc1 .h => .hpp for the headers
Vlad Glagolev <enqlave@gmail.com>
parents: 0
diff changeset
81 ifstream sysconfig(config, ios::in);
0
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
82
2
19227b0b7cc1 .h => .hpp for the headers
Vlad Glagolev <enqlave@gmail.com>
parents: 0
diff changeset
83 if (!sysconfig)
5
0faceb076254 code clean up
Vlad Glagolev <enqlave@gmail.com>
parents: 4
diff changeset
84 shut("unable to open configuration file");
0
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
85 else {
7
8d54d9fdeca3 fixed comments
Vlad Glagolev <enqlave@gmail.com>
parents: 5
diff changeset
86 if (CABAL->debug)
8d54d9fdeca3 fixed comments
Vlad Glagolev <enqlave@gmail.com>
parents: 5
diff changeset
87 cout << "CORE: parsing configuration file: " << config << endl;
0
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
88
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
89 if (servers + 1 < MAX_SERVERS) {
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
90 connections[++servers] = new Connection();
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
91 C = connections[servers];
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
92 }
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
93 else
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
94 cout << "Error: maximum connections exceed\n";
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
95 // TEST
2
19227b0b7cc1 .h => .hpp for the headers
Vlad Glagolev <enqlave@gmail.com>
parents: 0
diff changeset
96 C->hosts = C->addHost(C->hosts, "irc.enqlave.net", 6667, 0);
0
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
97 // TEST
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
98 }
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
99
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
100 servers++;
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
101
2
19227b0b7cc1 .h => .hpp for the headers
Vlad Glagolev <enqlave@gmail.com>
parents: 0
diff changeset
102 sysconfig.close();
0
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
103 }
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
104
2
19227b0b7cc1 .h => .hpp for the headers
Vlad Glagolev <enqlave@gmail.com>
parents: 0
diff changeset
105 void Core::checkPID()
0
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
106 {
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
107 ifstream procid(pid, ios::in);
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
108
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
109 if (procid) {
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
110 pid_t pids;
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
111 procid >> pids;
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
112 kill(pids, SIGCHLD);
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
113
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
114 if (errno != ESRCH)
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
115 shut ("another Core of CABAL is running");
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
116 }
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
117
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
118 procid.close();
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
119 }
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
120
2
19227b0b7cc1 .h => .hpp for the headers
Vlad Glagolev <enqlave@gmail.com>
parents: 0
diff changeset
121 void Core::writePID()
0
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
122 {
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
123 ofstream procid(pid, ios::out);
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
124
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
125 if (procid)
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
126 procid << getpid() << endl;
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
127 else {
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
128 cout << "Error: unable to write PID file\n";
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
129 exit (1);
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
130 }
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
131
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
132 procid.close();
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
133 }
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
134
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
135 void Core::work()
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
136 {
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
137 while (1) {
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
138 now = gettime();
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
139
5
0faceb076254 code clean up
Vlad Glagolev <enqlave@gmail.com>
parents: 4
diff changeset
140 usleep(100);
0
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
141
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
142 for (int e = 0; e < servers; e++)
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
143 connections[e]->establish();
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
144 }
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
145 }