-
Notifications
You must be signed in to change notification settings - Fork 16
Expand file tree
/
Copy pathmain.cpp
More file actions
99 lines (82 loc) · 2.54 KB
/
main.cpp
File metadata and controls
99 lines (82 loc) · 2.54 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
#include "serverconfig.h"
#include "tcp_server.h"
#include "udp_server.h"
#include "packetmanager.h"
#include "databasemanager.h"
#include "usermanager.h"
#include "roommanager.h"
#include "serverconsole.h"
HANDLE hMutex;
BOOL WINAPI ConsoleCtrlHandler(DWORD CtrlType) {
switch (CtrlType) {
case CTRL_CLOSE_EVENT:
case CTRL_LOGOFF_EVENT:
case CTRL_SHUTDOWN_EVENT: {
serverConsole.Stop();
roomManager.RemoveAllRooms();
userManager.RemoveAllUsers();
packetManager.Stop();
databaseManager.Shutdown();
tcpServer.Stop();
udpServer.Stop();
ReleaseMutex(hMutex);
return TRUE;
}
case CTRL_C_EVENT:
case CTRL_BREAK_EVENT: {
return TRUE;
}
default:
break;
}
return FALSE;
}
int main() {
if (!serverConsole.Init()) {
serverConsole.Print(PrefixType::Fatal, "[ ServerConsole ] Failed to initialize server console!\n");
return -1;
}
serverConsole.Start();
if (!serverConfig.Load()) {
serverConsole.Print(PrefixType::Fatal, "[ ServerConfig ] Failed to load server configs!\n");
return -1;
}
if (!databaseManager.Init(serverConfig.sqlServer, serverConfig.sqlUser, serverConfig.sqlPassword, serverConfig.sqlDatabase)) {
serverConsole.Print(PrefixType::Fatal, "[ DatabaseManager ] Failed to initialize database manager!\n");
return -1;
}
string mutexName = format("cso-master-server-{}-{}", serverConfig.serverID, serverConfig.channelID);
hMutex = CreateMutexA(NULL, FALSE, mutexName.c_str());
if (hMutex) {
DWORD dwWaitResult = WaitForSingleObject(hMutex, 0);
if (!dwWaitResult || dwWaitResult == WAIT_ABANDONED) {
databaseManager.RemoveAllUserSessions();
databaseManager.RemoveAllUserTransfers();
}
else {
serverConsole.Print(PrefixType::Fatal, "[ Main ] This server channel is already running in another process!\n");
return -1;
}
}
else {
serverConsole.Print(PrefixType::Fatal, "[ Main ] Failed to create mutex for server instance!\n");
return -1;
}
if (!tcpServer.Init(serverConfig.port)) {
serverConsole.Print(PrefixType::Fatal, "[ TCPServer ] Failed to initialize TCP server!\n");
return -1;
}
tcpServer.Start();
if (!udpServer.Init(serverConfig.port)) {
serverConsole.Print(PrefixType::Fatal, "[ UDPServer ] Failed to initialize UDP server!\n");
return -1;
}
udpServer.Start();
packetManager.Start();
SetConsoleCtrlHandler(ConsoleCtrlHandler, TRUE);
string consoleTitle = format("cso-master-server | Server Channel {}-{}", serverConfig.serverID, serverConfig.channelID);
SetConsoleTitleA(consoleTitle.c_str());
serverConsole.StartRead();
ReleaseMutex(hMutex);
return 0;
}