forked from Illarion-eV/Illarion-Server
-
Notifications
You must be signed in to change notification settings - Fork 0
/
PlayerManager.hpp
111 lines (81 loc) · 2.66 KB
/
PlayerManager.hpp
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
100
101
102
103
104
105
106
107
108
109
110
111
// illarionserver - server for the game Illarion
// Copyright 2011 Illarion e.V.
//
// This file is part of illarionserver.
//
// illarionserver is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// illarionserver is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with illarionserver. If not, see <http://www.gnu.org/licenses/>.
#include "InitialConnection.hpp"
#include <pthread.h>
#include "tvector.hpp"
#include "boost/thread/shared_mutex.hpp"
class Player;
class PlayerManager {
public:
static PlayerManager *get();
~PlayerManager();
void saveAll();
void activate();
bool threadOK() {
return threadOk;
}
bool findPlayer(std::string name);
void setLoginLogout(bool val);
typedef tvector<Player *> TPLAYERVECTOR;
TPLAYERVECTOR &getLogOutPlayers() {
return loggedOutPlayers;
}
TPLAYERVECTOR &getLogInPlayers() {
return loggedInPlayers;
}
private:
PlayerManager();
static PlayerManager *instance; /**< pointer to current local instance of the Player Manager*/
/**
* loop which is threaded to get new connections
* create players, or storing data and deleting old connections
*/
static void *loginLoop(PlayerManager *pmanager);
static void *playerSaveLoop(PlayerManager *pmanager);
//static void * deleteOldConnectionsLoop(PlayerManager * pmanager);
static boost::mutex mut;
//Mutex der gesetzt wird beim reloaden. (Als multi read single write lock)
static boost::shared_mutex reloadmutex;
/**
* true if the thread is running
*/
volatile bool running;
/**
* if false the thread was exited correctly
*/
volatile bool threadOk;
/**
* logged out players which connection wherent shutted down
*/
//CInitialConnection::TVECTORPLAYER shutdownConnections;
/**
* player which are not on the main map anymore
*/
TPLAYERVECTOR loggedOutPlayers;
/**
* players which are logged in and correctly loaded
*/
TPLAYERVECTOR loggedInPlayers;
/**
* initial connection to get the new connections
*/
InitialConnection incon;
pthread_t login_thread;
pthread_t save_thread;
//pthread_t deleteOldConnection_thread;
};