package org.zu.ardulink.connection;
import java.util.Arrays;
import java.util.List;
import org.zu.ardulink.ConnectionContact;
/**
* [ardulinktitle] [ardulinkversion]
*
* This is a fake connection used to create a Link without an Arduino. It hasn't a thread to manage messages coming from Arduino.
* It manages only link created with ALProtocol and it manages call backs with all ok messages. Since it hasn't a thread for
* incoming messages be careful with call backs that are done with the same caller thread.
*
* @author Luciano Zu
* [adsense]
*/
public class FakeConnection implements Connection {
private boolean connected = false;
private ConnectionContact contact;
@Override
public List<String> getPortList() {
return Arrays.asList(new String[]{"COM999"});
}
@Override
public boolean connect(Object... params) {
connected = true;
return isConnected();
}
@Override
public boolean disconnect() {
connected = false;
return !isConnected();
}
@Override
public boolean isConnected() {
return connected;
}
@Override
public boolean writeSerial(String message) {
String id = null;
int idPosition = message.indexOf("?id=");
if (idPosition != -1) {
id = message.substring(idPosition + 4);
}
sendReply(id);
return true;
}
@Override
public boolean writeSerial(int numBytes, int[] message) {
throw new RuntimeException("binary writeSerial should not be called for this connection");
}
/*
* Sends a reply in ALProtocol
*/
private void sendReply(String id) {
if(id != null) {
byte[] bytes = ("alp://rply/ok?id=" + id).getBytes();
int[] retmessage = new int[bytes.length];
for (int i = 0; i < retmessage.length; i++) {
retmessage[i] = bytes[i];
}
contact.parseInput("FAKE", retmessage.length, retmessage);
}
}
@Override
public void setConnectionContact(ConnectionContact contact) {
this.contact = contact;
}
}