annotate sources/core.cpp @ 2:19227b0b7cc1

.h => .hpp for the headers added year 2008 to copyright notes renamed some functions for better meaning prepared parser module for rewriting added showHelp() function some code clean up
author Vlad Glagolev <enqlave@gmail.com>
date Mon, 21 Jan 2008 01:14:10 +0300
parents bafff9de2a76
children a7051ac7118b
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
2
19227b0b7cc1 .h => .hpp for the headers
Vlad Glagolev <enqlave@gmail.com>
parents: 0
diff changeset
21 #include "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():
0
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
26 commander(COMMANDER)
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
27 {
2
19227b0b7cc1 .h => .hpp for the headers
Vlad Glagolev <enqlave@gmail.com>
parents: 0
diff changeset
28 pid = PID;
19227b0b7cc1 .h => .hpp for the headers
Vlad Glagolev <enqlave@gmail.com>
parents: 0
diff changeset
29
0
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
30 cout << "CORE: initializing...\n";
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
31
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
32 debug = true;
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
33
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
34 now = gettime();
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
35
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
36 for (int e = 0; e < MAX_SERVERS; e++)
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
37 connections[e] = 0;
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
38
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
39 servers = 0;
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
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
42 Core::~Core()
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
43 {
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
44 for (int e = 0; e < servers; e++)
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
45 delete connections[e];
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
46
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
47 servers = 0;
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
48
2
19227b0b7cc1 .h => .hpp for the headers
Vlad Glagolev <enqlave@gmail.com>
parents: 0
diff changeset
49 remove(pid);
0
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
50
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
51 cout << "CORE: shutdown complete\n";
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])
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
60 shut ("missing configuration file");
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
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
70 shut ("unknown option detected: " + (string)argv[e]);
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
2
19227b0b7cc1 .h => .hpp for the headers
Vlad Glagolev <enqlave@gmail.com>
parents: 0
diff changeset
79 C = false;
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)
0
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
84 shut ("unable to open configuration file");
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
85 else {
2
19227b0b7cc1 .h => .hpp for the headers
Vlad Glagolev <enqlave@gmail.com>
parents: 0
diff changeset
86 cout << "CORE: parsing configuration file: " << config << endl;
0
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
87
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
88 if (servers + 1 < MAX_SERVERS) {
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
89 connections[++servers] = new Connection();
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
90 C = connections[servers];
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
91 }
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
92 else
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
93 cout << "Error: maximum connections exceed\n";
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
94 // TEST
2
19227b0b7cc1 .h => .hpp for the headers
Vlad Glagolev <enqlave@gmail.com>
parents: 0
diff changeset
95 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
96 // TEST
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
97 }
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 servers++;
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
100
2
19227b0b7cc1 .h => .hpp for the headers
Vlad Glagolev <enqlave@gmail.com>
parents: 0
diff changeset
101 sysconfig.close();
0
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
102 }
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
103
2
19227b0b7cc1 .h => .hpp for the headers
Vlad Glagolev <enqlave@gmail.com>
parents: 0
diff changeset
104 void Core::checkPID()
0
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
105 {
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
106 ifstream procid(pid, ios::in);
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
107
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
108 if (procid) {
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
109 pid_t pids;
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
110 procid >> pids;
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
111 kill(pids, SIGCHLD);
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
112
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
113 if (errno != ESRCH)
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
114 shut ("another Core of CABAL is running");
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
115 }
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 procid.close();
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
118 }
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
119
2
19227b0b7cc1 .h => .hpp for the headers
Vlad Glagolev <enqlave@gmail.com>
parents: 0
diff changeset
120 void Core::writePID()
0
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
121 {
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
122 ofstream procid(pid, ios::out);
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
123
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
124 if (procid)
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
125 procid << getpid() << endl;
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
126 else {
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
127 cout << "Error: unable to write PID file\n";
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
128 exit (1);
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
129 }
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 procid.close();
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
132 }
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 void Core::work()
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
135 {
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
136 while (1) {
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
137 now = gettime();
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
138
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
139 usleep (100);
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
140
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
141 for (int e = 0; e < servers; e++)
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
142 connections[e]->establish();
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
143 }
bafff9de2a76 Initial commit since summer'07
Vlad Glagolev <enqlave@gmail.com>
parents:
diff changeset
144 }