ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/server/ext/00_map_handling.ext
(Generate patch)

Comparing deliantra/server/ext/00_map_handling.ext (file contents):
Revision 1.13 by root, Sun Dec 31 22:36:17 2006 UTC vs.
Revision 1.14 by root, Mon Jan 1 00:41:03 2007 UTC

7use Coro; 7use Coro;
8use Coro::AIO; 8use Coro::AIO;
9 9
10our $emergency_position = $cf::CFG{emergency_position} || ["/world/world_105_115", 5, 37]; 10our $emergency_position = $cf::CFG{emergency_position} || ["/world/world_105_115", 5, 37];
11 11
12our $DEACTIVATE_TIMEOUT = 60; # number of seconds after which maps get deactivated to save cpu 12our $DEACTIVATE_TIMEOUT = 60; # number of seconds after which maps get deactivated to save cpu
13our $SWAP_TIMEOUT = 600; # number of seconds after which maps inactive get swapped out 13our $SWAP_TIMEOUT = 600; # number of seconds after which maps inactive get swapped out
14our $SCHEDULE_INTERVAL = 8; # time the map scheduler sleeps between runs 14our $SCHEDULE_INTERVAL = 8; # time the map scheduler sleeps between runs
15our $SAVE_TIMEOUT = 60; # save maps every n seconds 15our $SAVE_TIMEOUT = 60; # save maps every n seconds
16our $SAVE_INTERVAL = 0.4; # save at max. one map every $SAVE_HOLD 16our $SAVE_INTERVAL = 0.4; # save at max. one map every $SAVE_HOLD
17our $MAX_RESET = 7200; 17our $MAX_RESET = 7200;
18 18
19$DEACTIVATE_TIMEOUT = 3;#d# 19$DEACTIVATE_TIMEOUT = 3;#d#
20$SWAP_TIMEOUT = 5;#d# 20$SWAP_TIMEOUT = 5;#d#
21$SCHEDULE_INTERVAL = 1; 21$SCHEDULE_INTERVAL = 1;
22 22
23our $SCHEDULER = cf::coro { 23our $SCHEDULER = cf::coro {
24 Coro::Timer::sleep 3600;#d#TODO#for debugging only
25 while () { 24 while () {
26 Coro::Timer::sleep $SCHEDULE_INTERVAL; 25 Coro::Timer::sleep $SCHEDULE_INTERVAL;
27 26
28 for my $map (values %cf::MAP) { 27 for my $map (values %cf::MAP) {
29 eval { 28 eval {
137 or return; 136 or return;
138 137
139 $map->load_header ($path) 138 $map->load_header ($path)
140 or return; 139 or return;
141 140
142 $map->reset_time (0) if $map->reset_time > $cf::RUNTIME;
143 $map->reset_timeout (10);#d#
144
145 $map->{load_path} = $path; 141 $map->{load_path} = $path;
142 use Data::Dumper; warn Dumper $map;#d#
146 143
147 $map 144 $map
148} 145}
149 146
150sub cf::map::find_map { 147sub cf::map::find_map {
157 154
158 $cf::MAP{$key} || do { 155 $cf::MAP{$key} || do {
159 # do it the slow way 156 # do it the slow way
160 my $map = try_load_header $path->save_path; 157 my $map = try_load_header $path->save_path;
161 158
162 if (!$map) { 159 if ($map) {
160 # safety
161 $map->{reset_time} = $cf::RUNTIME + $MAX_RESET
162 if $map->{reset_time} > $cf::RUNTIME + $MAX_RESET;
163 } else {
163 if (my $rmp = $path->random_map_params) { 164 if (my $rmp = $path->random_map_params) {
164 $map = generate_random_map $key, $rmp; 165 $map = generate_random_map $key, $rmp;
165 } else { 166 } else {
166 $map = try_load_header $path->load_path; 167 $map = try_load_header $path->load_path;
167 } 168 }
168 169
169 $map or return; 170 $map or return;
170 171
171 $map->{reset_time} = $cf::RUNTIME + $map->reset_timeout; 172 $map->{reset_time} = $cf::RUNTIME + ($map->reset_timeout || 3600);
172 $map->instantiate; 173 $map->instantiate;
173 174
174 # per-player maps become, after loading, normal maps 175 # per-player maps become, after loading, normal maps
175 $map->per_player (0) if $path->{user_rel}; 176 $map->per_player (0) if $path->{user_rel};
176 } 177 }
177 178
178 $map->path ($key); 179 $map->path ($key);
179 $map->{path} = $path; 180 $map->{path} = $path;
181 $map->last_access ($cf::RUNTIME);
180 182
181 $map->reset if $map->should_reset; 183 $map->reset if $map->should_reset;
182 184
183 $cf::MAP{$key} = $map 185 $cf::MAP{$key} = $map
184 } 186 }
270} 272}
271 273
272sub cf::map::should_reset { 274sub cf::map::should_reset {
273 my ($map) = @_; 275 my ($map) = @_;
274 276
275 return;#d#
276 # TODO: safety, remove and allow resettable per-player maps 277 # TODO: safety, remove and allow resettable per-player maps
277 return if $map->{path}{user_rel};#d# 278 return if $map->{path}{user_rel};#d#
278 return unless $map->reset_timeout; 279 #return unless $map->reset_timeout;
279 280
280 my $time = $map->fixed_resettime ? $map->{reset_time} : $map->last_access; 281 my $time = $map->fixed_resettime ? $map->{reset_time} : $map->last_access;
281 282
282 $time + $map->reset_timeout < $cf::RUNTIME 283 $time < $cf::RUNTIME
283} 284}
284 285
285sub cf::map::reset { 286sub cf::map::reset {
286 my ($self) = @_; 287 my ($self) = @_;
287 288

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines