#
# Copyright (c) 1998 Dirk Koopman G1TLH
#
-# $Id$
+#
#
package DXCommandmode;
# routing, this must go out here to prevent race condx
my $pkg = shift;
my $call = shift;
- my @rout = $main::routeroot->add_user($call, Route::here(1));
+# my @rout = $main::routeroot->add_user($call, Route::here(1));
+ DXProt::_add_thingy($main::routeroot, [$call, 0, 0, 1]);
# ALWAYS output the user
my $ref = Route::User::get($call);
if ($ref) {
$main::me->route_pc16($main::mycall, undef, $main::routeroot, $ref);
- $main::me->route_pc92a($main::mycall, undef, $main::routeroot, $ref);
+ $main::me->route_pc92a($main::mycall, undef, $main::routeroot, $ref) unless $DXProt::pc92_slug_changes;
}
return $self;
$self->conn->{echo} = $self->conn->{decho};
delete $self->conn->{decho};
$self->state('prompt');
- } elsif ($self->{state} eq 'talk') {
+ } elsif ($self->{state} eq 'talk' || $self->{state} eq 'chat') {
if ($cmdline =~ m{^(?:/EX|/ABORT)}i) {
for (@{$self->{talklist}}) {
- $self->send_talks($_, $self->msg('talkend'));
+ if ($self->{state} eq 'talk') {
+ $self->send_talks($_, $self->msg('talkend'));
+ } else {
+ $self->local_send('C', $self->msg('chatend', $_));
+ }
}
$self->state('prompt');
delete $self->{talklist};
LogDbg('DXCommand', "$self->{call} swore: $l with words:" . join(',', @bad) . ")");
} else {
for (@{$self->{talklist}}) {
- $self->send_talks($_, $l);
+ if ($self->{state} eq 'talk') {
+ $self->send_talks($_, $l);
+ } else {
+ send_chats($self, $_, $l)
+ }
}
}
}
}
- $self->send($self->talk_prompt);
+ $self->send($self->{state} eq 'talk' ? $self->talk_prompt : $self->chat_prompt);
} elsif ($self->{talklist} && @{$self->{talklist}}) {
# send what has been said to whoever is in this person's talk list
my @bad;
LogDbg('DXCommand', "$self->{call} swore: $cmdline with words:" . join(',', @bad) . ")");
} else {
for (@{$self->{talklist}}) {
- $self->send_talks($_, $rawline);
+ if ($self->{state} eq 'talk') {
+ $self->send_talks($_, $rawline);
+ } else {
+ send_chats($self, $_, $rawline);
+ }
}
}
$self->send($self->talk_prompt) if $self->{state} eq 'talk';
+ $self->send($self->chat_prompt) if $self->{state} eq 'chat';
} else {
# for safety
$self->state('prompt');
}
}
-sub talk_prompt
+sub send_chats
{
my $self = shift;
+ my $target = shift;
+ my $text = shift;
+
+ my $msgid = DXProt::nextchatmsgid();
+ $text = "#$msgid $text";
+ $main::me->normal(DXProt::pc93($target, $self->{call}, undef, $text));
+}
+
+sub special_prompt
+{
+ my $self = shift;
+ my $prompt = shift;
my @call;
for (@{$self->{talklist}}) {
my ($to, $via) = /(\S+)>(\S+)/;
$to = $_ unless $to;
push @call, $to;
}
- return $self->msg('talkprompt', join(',', @call));
+ return $self->msg($prompt, join(',', @call));
+}
+
+sub talk_prompt
+{
+ my $self = shift;
+ return $self->special_prompt('talkprompt');
+}
+
+sub chat_prompt
+{
+ my $self = shift;
+ return $self->special_prompt('chatprompt');
}
#
my $uref = Route::User::get($call);
my @rout;
if ($uref) {
- @rout = $main::routeroot->del_user($uref);
+# @rout = $main::routeroot->del_user($uref);
+ @rout = DXProt::_del_thingy($main::routeroot, [$call, 0]);
+
dbg("B/C PC17 on $main::mycall for: $call") if isdbg('route');
# issue a pc17 to everybody interested
$main::me->route_pc17($main::mycall, undef, $main::routeroot, $uref);
- $main::me->route_pc92d($main::mycall, undef, $main::routeroot, $uref);
+ $main::me->route_pc92d($main::mycall, undef, $main::routeroot, $uref) unless $DXProt::pc92_slug_changes;
} else {
confess "trying to disconnect a non existant user $call";
}
sub local_send
{
my ($self, $let, $buf) = @_;
- if ($self->{state} eq 'prompt' || $self->{state} eq 'talk') {
+ if ($self->{state} eq 'prompt' || $self->{state} eq 'talk' || $self->{state} eq 'chat') {
if ($self->{enhanced}) {
$self->send_later($let, $buf);
} else {
my $t = ztime($_[2]);
my $loc = '';
my $clth = $self->{consort} eq 'local' ? 29 : 30;
- my $comment = substr $_[3], 0, $clth;
+ my $comment = substr (($_[3] || ''), 0, $clth);
$comment .= ' ' x ($clth - length($comment));
- if ($self->{user}->wantgrid) {
+ if ($self->{user}->wantgrid) {
my $ref = DXUser->get_current($_[4]);
if ($ref) {
$loc = $ref->qra || '';