-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathGameServer.php
142 lines (121 loc) · 3.66 KB
/
GameServer.php
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
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
<?php
require 'Server.php';
require dirname(__FILE__) . '/core/iHandler.interface.php';
require dirname(__FILE__) . '/core/EventManager.class.php';
require dirname(__FILE__) . '/core/QueueManager.class.php';
require dirname(__FILE__) . '/core/Rooms.class.php';
require dirname(__FILE__) . '/core/Users.class.php';
require dirname(__FILE__) . '/core/games/iGame.interface.php';
require dirname(__FILE__) . '/core/games/battleship/Battleship.class.php';
/**
* GameServer.php
*
* Verwaltet alles
*
* @author David Rydwanski, Stefan Hackstein
*/
class GameServer extends Server
{
//Handlers
private $roomsHandler;
private $usersHandler;
/**
* started()
*
* Hier werden die Handler und der EventManager erstellt.
*/
protected function started()
{
EventManager::init();
QueueManager::init();
$this->roomsHandler = new Rooms();
$this->usersHandler = new Users();
}
/**
* handle_in($user, $messageObj)
*
* Wenn der Server ein Packet bekommt, wird die Funktion aufgerufen und das Paket an den passenden Handler weitergeleitet.
*
* @param User $user
* @param Array $messageObj
*/
protected function handle_in($user, $messageObj)
{
socket_getpeername($user->get_socket(), $clientIP);
printf("%s - GameServer->action()\n", $clientIP);
//DEBUG
//print_r($messageObj);
switch ($messageObj->handler) {
case 'rooms_handler':
$this->roomsHandler->action($messageObj, $user);
break;
case 'users_handler':
$this->usersHandler->action($messageObj, $user);
break;
default:
print("\! Unknown Handler !\n");
print_r($messageObj);
break;
}
}
/**
* handle_out
*
* Die Funktion holt sich aus dem EventMananger die Events.
* Die gefundenen Events werden bearbeitet.
*/
protected function handle_out()
{
$events = EventManager::events();
$reversed = new Stack();
while ($events->length() != 0) {
$reversed->push($events->pop());
}
while ($reversed->length() != 0) {
$this->execute($reversed->pop());
}
}
/**
* connected($user)
*
* Wird aufgerufen wenn sich ein Spieler auf dem Server verbindet.
*
* @param User $users
*/
protected function connected($user)
{
socket_getpeername($user->get_socket(), $clientIP);
printf("%s - GameServer->connected()\n", $clientIP);
}
/**
* disconnected($user)
*
* Diese Funktion wird aufgerufen, wenn ein Spieler die Verbindung trennt.
*
* @param User $users
*/
protected function disconnected($user)
{
socket_getpeername($user->get_socket(), $clientIP);
printf("%s - GameServer->disconnected()\n", $clientIP);
QueueManager::remove_player($user);
$this->roomsHandler->on_user_disconnected($user);
}
/**
* execute($event)
*
* Die Funktion execute schickt das übergebene Event an die Benutzer raus.
*
* @param Event $event
*/
private function execute($event)
{
$user = $event->get_user();
socket_getpeername($user->get_socket(), $clientIP);
printf("%s - GameServer->execute()\n", $clientIP);
//DEBUG
//print_r($event);
$packet = $event->get_packet();
$this->send_message($user, $packet);
}
}