blob: 807793c4beb690d05ffc297379fdf40c8bf03c84 [file] [log] [blame]
package etrice.api.tcp;
import org.eclipse.etrice.runtime.java.messaging.Message;
import org.eclipse.etrice.runtime.java.modelbase.EventMessage;
import org.eclipse.etrice.runtime.java.modelbase.EventWithDataMessage;
import org.eclipse.etrice.runtime.java.modelbase.IInterfaceItemOwner;
import org.eclipse.etrice.runtime.java.modelbase.InterfaceItemBase;
import org.eclipse.etrice.runtime.java.modelbase.PortBase;
import org.eclipse.etrice.runtime.java.modelbase.ReplicatedPortBase;
import org.eclipse.etrice.runtime.java.debugging.DebuggingService;
import static org.eclipse.etrice.runtime.java.etunit.EtUnit.*;
public class PTcpPayload {
// message IDs
public static final int MSG_MIN = 0;
public static final int OUT_receive = 1;
public static final int IN_send = 2;
public static final int MSG_MAX = 3;
private static String messageStrings[] = {"MIN", "receive", "send","MAX"};
public String getMessageString(int msg_id) {
if (msg_id<MSG_MIN || msg_id>MSG_MAX+1){
// id out of range
return "Message ID out of range";
}
else{
return messageStrings[msg_id];
}
}
// port class
static public class PTcpPayloadPort extends PortBase {
// constructors
public PTcpPayloadPort(IInterfaceItemOwner actor, String name, int localId) {
this(actor, name, localId, 0);
}
public PTcpPayloadPort(IInterfaceItemOwner actor, String name, int localId, int idx) {
super(actor, name, localId, idx);
DebuggingService.getInstance().addPortInstance(this);
}
public void destroy() {
DebuggingService.getInstance().removePortInstance(this);
super.destroy();
}
@Override
public void receive(Message m) {
if (!(m instanceof EventMessage))
return;
EventMessage msg = (EventMessage) m;
if (0 < msg.getEvtId() && msg.getEvtId() < MSG_MAX) {
DebuggingService.getInstance().addMessageAsyncIn(getPeerAddress(), getAddress(), messageStrings[msg.getEvtId()]);
if (msg instanceof EventWithDataMessage)
getActor().receiveEvent(this, msg.getEvtId(), ((EventWithDataMessage)msg).getData());
else
getActor().receiveEvent(this, msg.getEvtId(), null);
}
}
// sent messages
public void receive(DTcpPayload transitionData) {
DebuggingService.getInstance().addMessageAsyncOut(getAddress(), getPeerAddress(), messageStrings[OUT_receive]);
if (getPeerAddress()!=null)
getPeerMsgReceiver().receive(new EventWithDataMessage(getPeerAddress(), OUT_receive, transitionData.deepCopy()));
}
public void receive(int connectionId, int length, byte[] data) {
receive(new DTcpPayload(connectionId, length, data));
}
}
// replicated port class
static public class PTcpPayloadReplPort extends ReplicatedPortBase {
public PTcpPayloadReplPort(IInterfaceItemOwner actor, String name, int localId) {
super(actor, name, localId);
}
public int getReplication() {
return getNInterfaceItems();
}
public int getIndexOf(InterfaceItemBase ifitem){
return ifitem.getIdx();
}
public PTcpPayloadPort get(int idx) {
return (PTcpPayloadPort) getInterfaceItem(idx);
}
protected InterfaceItemBase createInterfaceItem(IInterfaceItemOwner rcv, String name, int lid, int idx) {
return new PTcpPayloadPort(rcv, name, lid, idx);
}
// outgoing messages
public void receive(DTcpPayload transitionData){
for (InterfaceItemBase item : getItems()) {
((PTcpPayloadPort)item).receive( transitionData);
}
}
}
// port class
static public class PTcpPayloadConjPort extends PortBase {
// constructors
public PTcpPayloadConjPort(IInterfaceItemOwner actor, String name, int localId) {
this(actor, name, localId, 0);
}
public PTcpPayloadConjPort(IInterfaceItemOwner actor, String name, int localId, int idx) {
super(actor, name, localId, idx);
DebuggingService.getInstance().addPortInstance(this);
}
public void destroy() {
DebuggingService.getInstance().removePortInstance(this);
super.destroy();
}
@Override
public void receive(Message m) {
if (!(m instanceof EventMessage))
return;
EventMessage msg = (EventMessage) m;
if (0 < msg.getEvtId() && msg.getEvtId() < MSG_MAX) {
DebuggingService.getInstance().addMessageAsyncIn(getPeerAddress(), getAddress(), messageStrings[msg.getEvtId()]);
if (msg instanceof EventWithDataMessage)
getActor().receiveEvent(this, msg.getEvtId(), ((EventWithDataMessage)msg).getData());
else
getActor().receiveEvent(this, msg.getEvtId(), null);
}
}
// sent messages
public void send(DTcpPayload transitionData) {
DebuggingService.getInstance().addMessageAsyncOut(getAddress(), getPeerAddress(), messageStrings[IN_send]);
if (getPeerAddress()!=null)
getPeerMsgReceiver().receive(new EventWithDataMessage(getPeerAddress(), IN_send, transitionData.deepCopy()));
}
public void send(int connectionId, int length, byte[] data) {
send(new DTcpPayload(connectionId, length, data));
}
}
// replicated port class
static public class PTcpPayloadConjReplPort extends ReplicatedPortBase {
public PTcpPayloadConjReplPort(IInterfaceItemOwner actor, String name, int localId) {
super(actor, name, localId);
}
public int getReplication() {
return getNInterfaceItems();
}
public int getIndexOf(InterfaceItemBase ifitem){
return ifitem.getIdx();
}
public PTcpPayloadConjPort get(int idx) {
return (PTcpPayloadConjPort) getInterfaceItem(idx);
}
protected InterfaceItemBase createInterfaceItem(IInterfaceItemOwner rcv, String name, int lid, int idx) {
return new PTcpPayloadConjPort(rcv, name, lid, idx);
}
// incoming messages
public void send(DTcpPayload transitionData){
for (InterfaceItemBase item : getItems()) {
((PTcpPayloadConjPort)item).send( transitionData);
}
}
}
}