… | |
… | |
26 | use utf8; |
26 | use utf8; |
27 | |
27 | |
28 | use AnyEvent (); |
28 | use AnyEvent (); |
29 | use BerkeleyDB; |
29 | use BerkeleyDB; |
30 | use Pod::POM (); |
30 | use Pod::POM (); |
31 | use Scalar::Util (); |
|
|
32 | use File::Path (); |
31 | use File::Path (); |
33 | use Storable (); # finally |
32 | use Storable (); # finally |
34 | |
33 | |
35 | BEGIN { |
34 | BEGIN { |
36 | use Crossfire::Protocol::Base (); |
35 | use Crossfire::Protocol::Base (); |
… | |
… | |
125 | while ($buffer =~ s/^(.*)\n//) { |
124 | while ($buffer =~ s/^(.*)\n//) { |
126 | my $line = $1; |
125 | my $line = $1; |
127 | $line =~ s/\s+$//; |
126 | $line =~ s/\s+$//; |
128 | utf8::decode $line; |
127 | utf8::decode $line; |
129 | if ($line =~ /^\x{e877}json_msg (.*)$/s) { |
128 | if ($line =~ /^\x{e877}json_msg (.*)$/s) { |
130 | $cb->(from_json $1); |
129 | $cb->(JSON::XS->new->allow_nonref->decode ($1)); |
131 | } else { |
130 | } else { |
132 | ::message ({ |
131 | ::message ({ |
133 | markup => "background($pid): " . CFPlus::asxml $line, |
132 | markup => "background($pid): " . CFPlus::asxml $line, |
134 | }); |
133 | }); |
135 | } |
134 | } |
… | |
… | |
138 | } |
137 | } |
139 | |
138 | |
140 | sub background_msg { |
139 | sub background_msg { |
141 | my ($msg) = @_; |
140 | my ($msg) = @_; |
142 | |
141 | |
143 | $msg = "\x{e877}json_msg " . to_json $msg; |
142 | $msg = "\x{e877}json_msg " . JSON::XS->new->allow_nonref->encode ($msg); |
144 | $msg =~ s/\n//g; |
143 | $msg =~ s/\n//g; |
145 | utf8::encode $msg; |
144 | utf8::encode $msg; |
146 | print $msg, "\n"; |
145 | print $msg, "\n"; |
147 | } |
146 | } |
148 | |
147 | |
… | |
… | |
162 | |
161 | |
163 | sub put($$$) { |
162 | sub put($$$) { |
164 | my ($db, $key, $data) = @_; |
163 | my ($db, $key, $data) = @_; |
165 | |
164 | |
166 | my $hkey = $db + 0; |
165 | my $hkey = $db + 0; |
167 | Scalar::Util::weaken $db; |
166 | CFPlus::weaken $db; |
168 | $DB_SYNC{$hkey} ||= AnyEvent->timer (after => 5, cb => sub { |
167 | $DB_SYNC{$hkey} ||= AnyEvent->timer (after => 30, cb => sub { |
169 | delete $DB_SYNC{$hkey}; |
168 | delete $DB_SYNC{$hkey}; |
170 | $db->db_sync if $db; |
169 | $db->db_sync if $db; |
171 | }); |
170 | }); |
172 | |
171 | |
173 | $db->db_put ($key => $data) |
172 | $db->db_put ($key => $data) |
… | |
… | |
285 | ? eval "DB_REGISTER | DB_RECOVER" |
284 | ? eval "DB_REGISTER | DB_RECOVER" |
286 | : 0; |
285 | : 0; |
287 | |
286 | |
288 | $DB_ENV = new BerkeleyDB::Env |
287 | $DB_ENV = new BerkeleyDB::Env |
289 | -Home => $DB_HOME, |
288 | -Home => $DB_HOME, |
290 | -Cachesize => 1_000_000, |
289 | -Cachesize => 8_000_000, |
291 | -ErrFile => "$DB_HOME/errorlog.txt", |
290 | -ErrFile => "$DB_HOME/errorlog.txt", |
292 | # -ErrPrefix => "DATABASE", |
291 | # -ErrPrefix => "DATABASE", |
293 | -Verbose => 1, |
292 | -Verbose => 1, |
294 | -Flags => DB_CREATE | DB_RECOVER | DB_INIT_MPOOL | DB_INIT_LOCK | DB_INIT_TXN | $recover, |
293 | -Flags => DB_CREATE | DB_RECOVER | DB_INIT_MPOOL | DB_INIT_LOCK | DB_INIT_TXN | $recover, |
295 | -SetFlags => DB_AUTO_COMMIT | DB_LOG_AUTOREMOVE, |
294 | -SetFlags => DB_AUTO_COMMIT | DB_LOG_AUTOREMOVE, |