001package jmri.jmrix.dccpp.swing.messages; 002 003import java.awt.Frame; 004import java.awt.GraphicsEnvironment; 005 006import jmri.jmrix.dccpp.*; 007import jmri.util.ThreadingUtil; 008 009/** Logs DCC-EX MESSAGE() broadcasts and opens the Messages window when one arrives. */ 010public class MessagesWatcher implements DCCppListener { 011 012 private final DCCppSystemConnectionMemo _memo; 013 014 public MessagesWatcher(DCCppSystemConnectionMemo memo) { 015 _memo = memo; 016 memo.getDCCppTrafficController().addDCCppListener(DCCppInterface.CS_INFO, this); 017 } 018 019 /** {@inheritDoc} */ 020 @Override 021 public void message(DCCppReply msg) { 022 if (!msg.isMessageReply()) { 023 return; 024 } 025 String text = msg.getMessageString(); 026 log.info("DCC-EX message: {}", text); 027 if (!GraphicsEnvironment.isHeadless() && MessagesFrame.isAutoOpen(_memo)) { 028 ThreadingUtil.runOnGUI(() -> { 029 MessagesFrame frame = MessagesFrame.findFrame(_memo); 030 if (frame == null) { 031 MessagesFrame.showFrame(_memo, text); 032 } else if ((frame.getExtendedState() & Frame.ICONIFIED) != 0) { 033 frame.setExtendedState(Frame.NORMAL); 034 } 035 }); 036 } 037 } 038 039 /** {@inheritDoc} */ 040 @Override 041 public void message(DCCppMessage msg) { 042 } 043 044 /** {@inheritDoc} */ 045 @Override 046 public void notifyTimeout(DCCppMessage msg) { 047 } 048 049 private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(MessagesWatcher.class); 050 051}