1 package cz.cuni.amis.pogamut.ut2004.communication.messages.custom;
2
3 import cz.cuni.amis.pogamut.base.communication.worldview.IWorldView;
4 import cz.cuni.amis.pogamut.base.communication.worldview.event.IWorldEventListener;
5 import cz.cuni.amis.pogamut.base.communication.worldview.listener.annotation.EventListener;
6 import cz.cuni.amis.pogamut.ut2004.communication.messages.gbinfomessages.ControlMessage;
7
8
9
10
11
12
13
14
15
16
17 public class ControlMessageTranslator {
18
19 private IWorldView worldView;
20 private ControlMessages controlMessagesParser;
21
22 private IWorldEventListener<ControlMessage> controlMessageListener = new IWorldEventListener<ControlMessage>() {
23 @Override
24 public void notify(ControlMessage event) {
25 controlMessage(event);
26 }
27 };
28
29 private boolean exceptionMode;
30
31 private boolean enabled = false;
32
33 public ControlMessageTranslator(IWorldView worldView, ControlMessages controlMessagesParser, boolean exceptionOnUnreadableMessage) {
34 this.worldView = worldView;
35 this.controlMessagesParser = controlMessagesParser;
36 this.exceptionMode = exceptionOnUnreadableMessage;
37 }
38
39 public ControlMessages getMessagesMapper() {
40 return controlMessagesParser;
41 }
42
43 public void enable() {
44 if (enabled) return;
45 enabled = true;
46 worldView.addEventListener(ControlMessage.class, controlMessageListener);
47 }
48
49 public void disable() {
50 if (!enabled) return;
51 enabled = false;
52 worldView.removeEventListener(ControlMessage.class, controlMessageListener);
53 }
54
55 protected void controlMessage(ControlMessage event) {
56 ICustomControlMessage msg;
57
58 if (exceptionMode) {
59 msg = controlMessagesParser.read(event);
60 } else {
61 try {
62 msg = controlMessagesParser.read(event);
63 } catch (Exception e) {
64
65 return;
66 }
67 }
68
69 worldView.notifyImmediately(msg);
70 }
71
72 }