#!/usr/bin/perl use strict; use JSONConnection; use JSON::Syck; use POSIX qw(strftime); use CursesChatMainwindow; our $CFG; sub load_cfg { $CFG ||= {}; return unless -e "$ENV{HOME}/.jsonircclrc"; open CFGH, "<", "$ENV{HOME}/.jsonircclrc" or die "Couldn't open ~/.jsonircclrc: $!"; $::CFG = JSON::Syck::Load (do { local $/; }); } our $js; load_cfg (); my $c = AnyEvent->condvar; my $d = 0; my $wt; sub timer { $wt = AnyEvent->timer (after => 3, cb => sub { printline (status => [0, "TEST $d"]); $d++; timer (); }); } #timer (); $js = JSONClientConnection->new (packet_cb => sub { my ($js, $data) = @_; require JSON::Syck; if ($data->{type} eq 'message') { my ($src_id) = ($data->{src}); my $ts = POSIX::strftime ("%T", localtime ($data->{timestamp})); $ts = "[$ts] $data->{from}->{src}> "; my (@chatline) = (("p".length $ts), 0, "$ts$data->{message}"); printline (((defined $src_id) ? "$src_id" : 'status'), \@chatline); } printline (status => [0, JSON::Syck::Dump ($data)]); }); $js->connect (localhost => 1236); CursesChatMainwindow::init; printline (status => ['p0', 0, "Connected!"]); printline (statusline => [20, "Welcome to the json enhanced chat framework!"]); CursesChatMainwindow::register_input_cb (sub { my ($input, $escape) = @_; unless (defined $input) { if (exists $CFG->{buffers}->{$escape}) { select_buffer (my $buf = $CFG->{buffers}->{$escape} || 'status'); printline (statusline => [20, "[$buf]"]); } else { select_buffer ('status'); printline (statusline => [20, "[status]"]); } return; } printline (status => [20, "[[[[$input]]]]"]); if ($input =~ m/^\/b\s*(\S+)/) { select_buffer ("$1"); printline (statusline => [20, "[$1]"]); } elsif ($input =~ m/^\/colors/) { CursesChatMainwindow::print_colors; } else { printline (status => [20, "SELDEF $input"]); $js->send_data ({ type => 'message', dest => ("".current_buffer ()), message => $input }); } }); $c->wait; CursesChatMainwindow::end;