Элемент connections
агента (по умолчанию Ссылка на агенты ) получает все сообщения, отправленные этому агенту (которые затем по умолчанию передаются любым диаграммам состояний, но вы можетеконтролировать это в свойствах connections
). Исключение составляют случаи, когда сообщение поступает от двунаправленного соединения (в этом случае сообщение будет доступно только в , Ссылка на агенты в агенте 'дальнего конца').
Если у вас есть однонаправленный набор соединений от матери к ребенку (скажем, от агента типа «Мать» к агенту типа «Ребенок», с Связью с агентами в программе «Мать» с именем children
), то вы можете получить доступ ксообщение и отправитель (используя ключевые слова, как вы упомянули в справке) в элементе connections
вашего дочернего агента по умолчанию.
Также необходимо убедиться, что вы отправляете сообщение всем подключенным черезсоответствующая ссылка на агентов . Таким образом, вам нужно что-то вроде:
(a) В агенте Матери: children.sendToAllConnected("Hello");
(b) В агенте Child connections
При получении сообщения действие: traceln("Got message " + msg + " from sender " + sender);
(В вашем случае, очевидно, вы бы имели логику делать что-то зависящее от отправителя.)
PS Вы сказали, что пытаетесь сделать sender = msgSender
. Это не имеет смысла: вы пытались установить отправителя сообщения на что-то? Вы не можете сделать это: sender
доступно только в действии Ссылка на агентов получающего агента и всегда ссылается на фактического агента отправителя. (Например, вы не можете «подделать» отправителя, и вам никогда не придется его устанавливать.)