ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/Deliantra-Client/bin/cfplus
(Generate patch)

Comparing deliantra/Deliantra-Client/bin/cfplus (file contents):
Revision 1.124 by root, Tue Nov 7 22:41:27 2006 UTC vs.
Revision 1.125 by root, Thu Nov 16 19:42:46 2006 UTC

75}; 75};
76 76
77my $MAX_FPS = 60; 77my $MAX_FPS = 60;
78my $MIN_FPS = 5; # unused as of yet 78my $MIN_FPS = 5; # unused as of yet
79 79
80our $META_SERVER = "crossfire.real-time.com:13326"; 80our $META_SERVER = "http://metaserver.schmorp.de/current.json";
81 81
82our $LAST_REFRESH; 82our $LAST_REFRESH;
83our $NOW; 83our $NOW;
84 84
85our $CFG; 85our $CFG;
857 857
858 my $table = $METASERVER->{table}; 858 my $table = $METASERVER->{table};
859 $table->clear; 859 $table->clear;
860 $table->add (0, 0, my $label = new CFPlus::UI::Label max_w => $WIDTH * 0.8, text => "fetching server list..."); 860 $table->add (0, 0, my $label = new CFPlus::UI::Label max_w => $WIDTH * 0.8, text => "fetching server list...");
861 861
862 my $buf; 862 my $ok = 0;
863 863
864 my $fh = new IO::Socket::INET PeerHost => $META_SERVER, Blocking => 0; 864 CFPlus::background {
865 my $ua = CFPlus::lwp_useragent;
865 866
866 unless ($fh) { 867 CFPlus::background_msg CFPlus::from_json +(CFPlus::lwp_check $ua->get ($META_SERVER))->decoded_content;
867 $label->set_text ("unable to contact metaserver: $!"); 868 } sub {
868 return; 869 my ($msg) = @_;
869 } 870 if ($msg) {
870
871 Event->io (fd => $fh, poll => 'r', cb => sub {
872 my $res = sysread $fh, $buf, 8192, length $buf;
873
874 if (!defined $res) {
875 $_[0]->w->cancel;
876 $label->set_text ("error while retrieving server list: $!");
877 } elsif ($res == 0) {
878 $_[0]->w->cancel;
879 status "server list retrieved";
880
881 utf8::decode $buf if utf8::valid $buf;
882
883 $table->clear; 871 $table->clear;
884 872
885 my @tip = ( 873 my @tip = (
886 "The current number of users logged in on the server.", 874 "The current number of users logged in on the server.",
887 "The hostname of the server.", 875 "The hostname of the server.",
897 for 0 .. $#col; 885 for 0 .. $#col;
898 886
899 my @align = qw(1 0 1 1 -1); 887 my @align = qw(1 0 1 1 -1);
900 888
901 my $y = 0; 889 my $y = 0;
902 for my $m (sort { $b->[3] <=> $a->[3] } map [split /\|/], split /\015?\012/, $buf) { 890 for my $m (
891 sort {
892 $b->{version} <=> $a->{version}
893 or $b->{users} <=> $a->{users}
894 }
895 @{ $msg->{servers} }
896 ) {
903 my ($ip, $last, $host, $users, $version, $desc, $ibytes, $obytes, $uptime) = @$m; 897 my ($ip, $last, $host, $users, $version, $desc, $ibytes, $obytes, $uptime) =
898 @$m{qw(ip age hostname users version description ibytes obytes uptime)};
904 899
905 for ($desc) { 900 for ($desc) {
906 s/<br>/\n/gi; 901 s/<br>/\n/gi;
907 s/<li>/\n· /gi; 902 s/<li>/\n· /gi;
908 s/<.*?>//sgi; 903 s/<.*?>//sgi;
909 s/&/&amp;/g; 904 s/&amp;/&/g;
910 s/</&lt;/g; 905 s/&lt;/</g;
911 s/>/&gt;/g; 906 s/&gt;/>/g;
912 } 907 }
913 908
914 $uptime = sprintf "%dd %02d:%02d:%02d", 909 $uptime = sprintf "%dd %02d:%02d:%02d",
915 (int $m->[8] / 86400), 910 (int $uptime / 86400),
916 (int $m->[8] / 3600) % 24, 911 (int $uptime / 3600) % 24,
917 (int $m->[8] / 60) % 60, 912 (int $uptime / 60) % 60,
918 $m->[8] % 60; 913 $uptime % 60;
919 914
920 $m = [$users, $host, $uptime, $version, $desc]; 915 $m = [$users, $host, $uptime, $version, $desc];
921 916
922 $y++; 917 $y++;
923 918
933 ), 928 ),
934 (new CFPlus::UI::Empty expand => 1), 929 (new CFPlus::UI::Empty expand => 1),
935 ]); 930 ]);
936 931
937 $table->add ($_, $y, new CFPlus::UI::Label 932 $table->add ($_, $y, new CFPlus::UI::Label
933 max_w => $::WIDTH * 0.4,
938 ellipsise => 0, 934 ellipsise => 0,
939 align => $align[$_], 935 align => $align[$_],
940 text => $m->[$_], 936 text => $m->[$_],
941 tooltip => $tip[$_], 937 tooltip => $tip[$_],
938 fg => ($m->[3] =~ /\+$/ ? [1, 1, 1] : [.7, .7, .7]),
942 can_hover => 1, 939 can_hover => 1,
943 can_events => 1, 940 can_events => 1,
944 fontsize => 0.8) 941 fontsize => 0.8)
945 for 0 .. $#$m; 942 for 0 .. $#$m;
946 } 943 }
944 } else {
945 $ok or $label->set_text ("error while contacting metaserver");
947 } 946 }
948 }); 947 };
948
949} 949}
950 950
951sub metaserver_dialog { 951sub metaserver_dialog {
952 my $vbox = new CFPlus::UI::VBox; 952 my $vbox = new CFPlus::UI::VBox;
953 my $table = new CFPlus::UI::Table; 953 my $table = new CFPlus::UI::Table;
957 title => "Server List", 957 title => "Server List",
958 name => 'metaserver_dialog', 958 name => 'metaserver_dialog',
959 x => 'center', 959 x => 'center',
960 y => 'center', 960 y => 'center',
961 z => 3, 961 z => 3,
962 force_w => $::WIDTH * 0.9,
962 force_h => $::HEIGHT * 0.4, 963 force_h => $::HEIGHT * 0.7,
963 child => $vbox, 964 child => $vbox,
964 has_close_button => 1, 965 has_close_button => 1,
965 table => $table, 966 table => $table,
966 on_visibility_change => sub { 967 on_visibility_change => sub {
967 update_metaserver ($_[0]) if $_[1]; 968 update_metaserver ($_[0]) if $_[1];

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines