1 package com.neuronrobotics.application.xmpp;
3 import java.util.ArrayList;
4 import java.util.EnumSet;
6 import org.jivesoftware.smack.Chat;
7 import org.jivesoftware.smack.MessageListener;
8 import org.jivesoftware.smack.XMPPException;
9 import org.jivesoftware.smack.packet.Message;
11 import com.neuronrobotics.application.xmpp.GoogleChat.IChatLog;
12 import com.neuronrobotics.sdk.dyio.DyIO;
13 import com.neuronrobotics.sdk.dyio.DyIOChannelEvent;
14 import com.neuronrobotics.sdk.dyio.DyIOChannelMode;
15 import com.neuronrobotics.sdk.common.DeviceManager;
16 import com.neuronrobotics.sdk.dyio.IChannelEventListener;
26 private ArrayList<ChatAsyncListener>
listeners =
new ArrayList<ChatAsyncListener>();
44 Message msg =
new Message(message.getFrom(), Message.Type.chat);
45 if(message.getType().equals(Message.Type.chat) && message.getBody() !=
null) {
46 System.out.println(
"Received: " + message.getBody()+
" from: "+message.getFrom());
48 log.
onLogEvent(
""+message.getFrom()+
">> "+ message.getBody());
51 String ret =
onMessage(message.getBody(),chat, message.getFrom());
53 System.out.println(
"Sending: "+msg.getBody());
57 chat.sendMessage(msg);
58 }
catch (XMPPException ex) {
60 System.out.println(
"Failed to send message");
63 System.out.println(
"I got a message I didn't understand\n\n"+message.getType());
71 public String
onMessage(String input,Chat chat,String from) {
72 String [] packet = input.split(
"\\ ");
73 if(packet[0].toLowerCase().contains(
"ping")){
75 }
else if(packet[0].toLowerCase().contains(
"state")){
77 }
else if(packet[0].toLowerCase().contains(
"setmode")){
79 boolean found =
false;
82 options+=cm.toSlug()+
"\n";
83 if(packet[2].toLowerCase().equals(cm.toSlug())){
89 int port = Integer.parseInt(packet[1]);
92 return "setMode "+port+
" "+m.
toSlug();
97 return "error: Mode not settible on channel #"+packet[1]+
" mode options are:\n"+options;
98 }
else if(packet[0].toLowerCase().contains(
"setvalue")){
99 int port = Integer.parseInt(packet[1]);
100 int value = Integer.parseInt(packet[2]);
102 return "setValue "+port+
" "+value;
103 }
else if(packet[0].toLowerCase().contains(
"getvalue")){
104 int port = Integer.parseInt(packet[1]);
106 return "getValue "+port+
" "+value;
107 }
else if(packet[0].toLowerCase().contains(
"addasync")){
108 int port = Integer.parseInt(packet[1]);
111 rate = Integer.parseInt(packet[2]);
112 }
catch (Exception ex){
120 return "async "+port+
" "+rate;
122 else if(packet[0].toLowerCase().contains(
"removeasync")){
123 int port = Integer.parseInt(packet[1]);
125 return "async removed "+port+
" ";
127 else if(packet[0].toLowerCase().contains(
"reset")){
128 for (
int i=0;i<24;i++){
131 return "system reset!";
147 if(l.getFrom().equals(from) && l.getChat()==c){
149 System.out.println(
"Found old listener");
153 System.out.println(
"Adding new listener");
203 Message msg =
new Message(
getFrom(), Message.Type.chat);
206 System.err.println(
"async: "+msg.getBody());
208 chat.sendMessage(msg);
209 }
catch (XMPPException e1) {
211 e1.printStackTrace();
249 String s=
"This is a REPL loop for talking to the DyIO\n" +
250 "Commands use a command name, which DyIO port your connected to, and a value\n" +
251 "The 3 fields are seperated by a single space charrector\n" +
252 "The name is a string, and the 2 data fields are integers\n" +
253 "If a field is unused, it will be displayed as 'none'\n" +
255 s+=
"ping \tnone \tnone :returns ping message\n";
256 s+=
"state \tnone \tnone :returns state information\n";
257 s+=
"reset \tnone \tnone :returns none Removes all async listeners\n";
258 s+=
"setMode \t(int)channel \t(String)mode :returns the mode if successful, 'error' if not sucessful\n";
259 s+=
"setValue \t(int)channel \t(int)value :returns the value if successful, 'error' if not sucessful\n";
260 s+=
"getValue \t(int)channel \tnone :returns (int)value\n";
261 s+=
"addAsync \t(int)channel \t(int)update rate in Ms :returns (int)value: Async of any incoming data\n";
262 s+=
"removeAsync \t(int)channel \tnone :returns none Removes one async listener\n";
void onChannelEvent(DyIOChannelEvent e)
void setFrom(String from)
ChatAsyncListener(Chat c, String from)
void onChannelEvent(DyIOChannelEvent e)
String onMessage(String input, Chat chat, String from)
DyIOConversation(IChatLog log)
ChatAsyncListener getListener(Chat c, String from)
void processMessage(Chat chat, Message message)
ArrayList< ChatAsyncListener > listeners
static Object getSpecificDevice(String name, IDeviceProvider provider)
void onLogEvent(String newText)