ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/server/ext/map-random.ext
Revision: 1.4
Committed: Thu Jan 11 01:06:02 2007 UTC (17 years, 4 months ago) by root
Branch: MAIN
Changes since 1.3: +1 -1 lines
Log Message:
minor adjustments

File Contents

# Content
1 #! perl
2
3 use base "cf::path";
4
5 __PACKAGE__->register ("random");
6
7 sub init {
8 my ($self) = @_;
9
10 if (0 < Coro::AIO::aio_load "$cf::RANDOM_MAPS/$self->{path}.meta", my $data) {
11 $self->{random} = cf::from_json $data;
12 $self->{random}{custom} ||= "$self->{random}{origin_map}+$self->{random}{origin_x}+$self->{random}{origin_y}";
13 }
14 }
15
16 sub visible_name {
17 my ($self) = @_;
18
19 my $rmp = $self->{random};
20 "random map at $rmp->{custom}, level $rmp->{dungeon_level}"
21 }
22
23 sub save_path {
24 my ($self) = @_;
25
26 sprintf "%s/%s", $cf::RANDOM_MAPS, $self->{path}
27 }
28
29 sub uniq_path {
30 undef
31 }
32
33 sub load_orig {
34 my ($self) = @_;
35
36 $self->{random}
37 ? cf::map::generate_random_map "$self", $self->{random}
38 : ()
39 }
40
41 sub clean_random_maps {
42 cf::async {
43 my $files = Coro::AIO::aio_readdir $cf::RANDOM_MAPS
44 or return;
45
46 my $META_TIMEOUT = $cf::CFG{map_random_meta_timeout} || 86400 * 7;
47 my $MAP_TIMEOUT = $cf::CFG{map_random_map_timeout} || 3600 * 6;
48
49 for my $file (@$files) {
50 next if $file =~ /\.pst$/;
51
52 Coro::AIO::aio_stat "$cf::RANDOM_MAPS/$file"
53 and next;
54
55 my $age = $cf::NOW - (stat _)[8];
56
57 if ($file =~ /\.meta$/) {
58 if ($age > $META_TIMEOUT) {
59 warn "resetting random meta data for $file";
60 IO::AIO::aio_unlink "$cf::RANDOM_MAPS/$file";
61 }
62 } else {
63 if ($age > $MAP_TIMEOUT) {
64 warn "resetting random map $file";
65 IO::AIO::aioreq_pri 4; IO::AIO::aio_unlink "$cf::RANDOM_MAPS/$file";
66 IO::AIO::aioreq_pri 4; IO::AIO::aio_unlink "$cf::RANDOM_MAPS/$file.pst";
67 }
68 }
69 }
70 };
71 }
72
73 # clean up old temp maps regularly
74 Event->timer (
75 data => cf::WF_AUTOCANCEL,
76 interval => 3600,
77 after => 600,
78 cb => \&clean_random_maps,
79 );
80
81 1
82