package org.scribble.net;
import java.io.Serializable;
import java.util.Arrays;
import java.util.stream.Collectors;
import org.scribble.sesstype.name.Op;
public class ScribMessage implements Serializable
{
private static final long serialVersionUID = 1L;
// add msg source
public final Op op;
public final Object[] payload;
public ScribMessage(Op op, Object... payload)
{
this.op = op;
this.payload = payload; // FIXME: make defensive array copy?
}
/*// Unicast
public MulticastSignature toMulticastSignature(Role src, Role dest, Scope scope)
{
return toMulticastSignature(src, Arrays.asList(dest), scope);
}
public MulticastSignature toMulticastSignature(Role src, List<Role> dests, Scope scope)
{
return new MulticastSignature(src, dests, scope, op, getPayloadTypes());
}
protected final List<PayloadType> getPayloadTypes()
{
List<PayloadType> types = new LinkedList<>();
for (Object o : this.payload)
{
// FIXME: routine should be plugin based on schema
types.add(new PayloadType(o.getClass().toString()));
}
return types;
}*/
@Override
public int hashCode()
{
int hash = 73;
//hash = 31 * hash + super.hashCode();
hash = 31 * hash + op.hashCode();
hash = 31 * hash + this.payload.hashCode();
return hash;
}
@Override
public boolean equals(Object o)
{
if (this == o)
{
return true;
}
if (!(o instanceof ScribMessage))
{
return false;
}
ScribMessage m = (ScribMessage) o;
return m.canEqual(this) && this.op.equals(m.op) && this.payload.equals(m.payload);
}
public boolean canEqual(Object o)
{
return o instanceof ScribMessage;
}
@Override
public String toString()
{
String s = this.op + "(";
if (this.payload.length > 0)
{
s += Arrays.asList(this.payload).stream().map((o) -> o.toString()).collect(Collectors.joining(", "));
}
return s + ")";
}
}