diff options
Diffstat (limited to 'src/main/java/net/cshift/transit/network')
10 files changed, 196 insertions, 172 deletions
diff --git a/src/main/java/net/cshift/transit/network/Channel.java b/src/main/java/net/cshift/transit/network/Channel.java new file mode 100644 index 0000000..43dbabc --- /dev/null +++ b/src/main/java/net/cshift/transit/network/Channel.java @@ -0,0 +1,119 @@ +package net.cshift.transit.network; + +import net.cshift.transit.network.packet.IStaticPacket; + +/** + * @author Kyle Gunger + * @apiNote A channel represents a connection between two nodes. It is able to send data in packets, and serves as a way to organize incoming traffic. + * @param <D> The type of data the packets will be transfering + */ +public class Channel<D> { + private INode to; + private int id; + private String group; + + /** This constructor should be called by a node approving a connection. The approving node can give the connection an ID and group. + * Negative IDs indicate a terminated connection, so do not initialize the class with a negative ID. + * + * @param node The recieving node + * @param id The channel's id, as assigned by the recieving node. + * @param group + */ + public Channel(INode node, int id, String group) + { + to = node; + this.id = id; + this.group = group; + } + + + + // #################### + // # Channel specific # + // #################### + + /** The recieving INode + * + * @return + */ + public INode getReciever() + { + return to; + } + + /** The ID of the connection, assigned by the recieving INode + * + * @return + */ + public int getID() + { + return id; + } + + /** The group that the channel operates on + * + * @return + */ + public String getGroup() { + return group; + } + + /** Returns true if the connection has been terminated + * + * @return + */ + public boolean isTerminated() + { + return id < 0; + } + + + + // ################################ + // # Info from the recieving node # + // ################################ + + /** Pressure + * + * @return A Number representing the pressure from the channel (in base group units). + */ + public Number pressure() + { + return to.getPressure(this); + } + + /** Max transfer rate + * + * @return A Number representing the max transfer rate from the channel (in base group units). + */ + public Number rate() + { + return to.getRate(this); + } + + + + // ################################ + // # Interact with the other node # + // ################################ + + /** Terminates the connection and relays the termination to the recieving node + */ + public void terminate() + { + id = -1; + to.onTerminate(this); + } + + /** Send a packet to the recieving node + * + * @param packet the packet to send + * @return {@code true} if the recieving node accepts the packet + */ + public boolean send(IStaticPacket<D> packet) + { + if(!this.isTerminated()) + return to.accept(packet, this); + return false; + } +} diff --git a/src/main/java/net/cshift/transit/network/INode.java b/src/main/java/net/cshift/transit/network/INode.java new file mode 100644 index 0000000..0396347 --- /dev/null +++ b/src/main/java/net/cshift/transit/network/INode.java @@ -0,0 +1,73 @@ +package net.cshift.transit.network; + +import net.cshift.transit.network.packet.*; + +/** + * @author Kyle Gunger + * @apiNote A node inside or outside a system. + */ +public interface INode +{ + /** Returns true if the group given is used by the node + * + * @param group the group to query + * @return {@code true} if the node supports the group + */ + public boolean hasGroup(String group); + + /** Get the system managing the node or {@code null} if there isn't one + * + * @return System + */ + public ISystem getSystem(); + + + + // ############### + // # Connections # + // ############### + + /** Call this function to establish a connection with a node. + * + * @param <T> The type of connection being asked for + * @param group The group of connection being asked for + * @param asker The asking node + * @return A channel if the node accepts the request, {@code null} otherwise + */ + public <T> Channel<T> connect(String group, INode asker); + + /** Accept a packet from a channel (or not). + * + * @apiNote Do not call this function, use Channel.send(packet) instead. + * @param <T> The type of the packet and channel + * @param packet The packet to be vetted + * @param channel The channel which the packet is coming through + * @return true if the node accepts the packet + */ + public <T> boolean accept(IStaticPacket<T> packet, Channel<T> channel); + + /** Pressure + * + * @apiNote Do not call this function, use Channel.pressure() instead. + * @param channel The channel asking for the pressure + * @return A Number representing the pressure from the channel (in base group units). + */ + public <T> Number getPressure(Channel<T> channel); + + /** Transfer rate + * + * @apiNote Do not call this function, use Channel.rate() instead. + * @param channel The channel asking for the transfer rate + * @return A Number representing the transfer rate from the channel (in base group units). + */ + public <T> Number getRate(Channel<T> channel); + + /** Called when a channel is terminated + * + * @apiNote Do not call this function, use Channel.terminate() instead. + * @param <T> The type of the channel + * @param channel The channel being terminated + */ + public <T> void onTerminate(Channel<T> channel); + +} diff --git a/src/main/java/net/cshift/transit/network/system/ISystem.java b/src/main/java/net/cshift/transit/network/ISystem.java index 9e01645..8d41c1d 100644 --- a/src/main/java/net/cshift/transit/network/system/ISystem.java +++ b/src/main/java/net/cshift/transit/network/ISystem.java @@ -1,4 +1,4 @@ -package net.cshift.transit.network.system; +package net.cshift.transit.network; /** diff --git a/src/main/java/net/cshift/transit/network/packet/dynamic/DynamicPacket.java b/src/main/java/net/cshift/transit/network/packet/DynamicPacket.java index d5feb92..60ad177 100644 --- a/src/main/java/net/cshift/transit/network/packet/dynamic/DynamicPacket.java +++ b/src/main/java/net/cshift/transit/network/packet/DynamicPacket.java @@ -1,4 +1,4 @@ -package net.cshift.transit.network.packet.dynamic; +package net.cshift.transit.network.packet; import net.cshift.transit.type.Type; diff --git a/src/main/java/net/cshift/transit/network/packet/dynamic/IDynamicPacket.java b/src/main/java/net/cshift/transit/network/packet/IDynamicPacket.java index ffb68a3..8b7c330 100644 --- a/src/main/java/net/cshift/transit/network/packet/dynamic/IDynamicPacket.java +++ b/src/main/java/net/cshift/transit/network/packet/IDynamicPacket.java @@ -1,6 +1,4 @@ -package net.cshift.transit.network.packet.dynamic; - -import net.cshift.transit.network.packet.IStaticPacket; +package net.cshift.transit.network.packet; /** Interface describing a fluid packet. * @author Kyle Gunger diff --git a/src/main/java/net/cshift/transit/network/packet/dynamic/MetaDynamicPacket.java b/src/main/java/net/cshift/transit/network/packet/MetaDynamicPacket.java index 9e7d293..b87c2ed 100644 --- a/src/main/java/net/cshift/transit/network/packet/dynamic/MetaDynamicPacket.java +++ b/src/main/java/net/cshift/transit/network/packet/MetaDynamicPacket.java @@ -1,4 +1,4 @@ -package net.cshift.transit.network.packet.dynamic; +package net.cshift.transit.network.packet; import net.cshift.transit.type.Type; diff --git a/src/main/java/net/cshift/transit/network/system/Connection.java b/src/main/java/net/cshift/transit/network/system/Connection.java deleted file mode 100644 index a111795..0000000 --- a/src/main/java/net/cshift/transit/network/system/Connection.java +++ /dev/null @@ -1,49 +0,0 @@ -package net.cshift.transit.network.system; - -public class Connection { - INode node; - short mask; - - public Connection(INode n) - { - node = n; - mask = 0; - } - - public Connection(INode n, short m) - { - node = n; - mask = m; - } - - public INode getNode() - { - return node; - } - - public boolean isAccepting() - { - return (mask & 1) == 1; - } - - public void setAccepting(boolean value) - { - if(isAccepting() && value == false) - mask -= 1; - else if(!isAccepting() && value == true) - mask += 1; - } - - public boolean isProviding() - { - return (mask & 2) == 2; - } - - public void setProviding(boolean value) - { - if(isProviding() && value == false) - mask -= 2; - else if(!isProviding() && value == true) - mask += 2; - } -} diff --git a/src/main/java/net/cshift/transit/network/system/INode.java b/src/main/java/net/cshift/transit/network/system/INode.java deleted file mode 100644 index 5c901a9..0000000 --- a/src/main/java/net/cshift/transit/network/system/INode.java +++ /dev/null @@ -1,53 +0,0 @@ -package net.cshift.transit.network.system; - -/** - * @author Kyle Gunger - * @apiNote A node inside or outside a system. - */ -public interface INode -{ - - /**Returns true if the group given is used by the node - * - * @param groupID the group to querry - * @return bool - */ - public boolean hasGroup(String groupID); - - - /**Get the system managing the node or {@code null} if there isn't one - * - * @return System - */ - public ISystem getSystem(); - - - /** Get the data of one of the TypeGroups the Node supports - * - * @param groupID - * @return - */ - public Object getData(String groupID); - - - /** Set the group data for the node - * - * @param dat - * @param groupID - */ - public void setData(Object dat, String groupID); - - - /** Get the nodes that this node is connected to - * - * @return Node[] - */ - public Connection[] getConnections(); - - - /** Get the number of nodes that this node is connected to - * - * @return int - */ - public int connectionCount(); -} diff --git a/src/main/java/net/cshift/transit/network/system/swap/IAcceptorNode.java b/src/main/java/net/cshift/transit/network/system/swap/IAcceptorNode.java deleted file mode 100644 index b64d4cc..0000000 --- a/src/main/java/net/cshift/transit/network/system/swap/IAcceptorNode.java +++ /dev/null @@ -1,37 +0,0 @@ -package net.cshift.transit.network.system.swap; - -import net.cshift.transit.network.packet.IStaticPacket; -import net.cshift.transit.network.system.INode; - -/** - * @author Kyle Gunger - * @apiNote A node which can accept packets of specific types - */ -public interface IAcceptorNode extends INode -{ - - /** Link another node as a provider - * - * @param requester The object to be a provider - * @param group - * @return - */ - public boolean linkProvider(IProviderNode requestor, String group); - - - /** Unlink a provider from the acceptor - * - * @param requestor - * @return - */ - public boolean unlinkProvider(IProviderNode requestor); - - - /** Accept a packet from a provider - * - * @param packet - * @param group - * @return - */ - public <T> boolean accept(IStaticPacket<T> packet, String group); -} diff --git a/src/main/java/net/cshift/transit/network/system/swap/IProviderNode.java b/src/main/java/net/cshift/transit/network/system/swap/IProviderNode.java deleted file mode 100644 index 5a3bd80..0000000 --- a/src/main/java/net/cshift/transit/network/system/swap/IProviderNode.java +++ /dev/null @@ -1,27 +0,0 @@ -package net.cshift.transit.network.system.swap; - -import net.cshift.transit.network.system.INode; - -/** - * @author Kyle Gunger - * @apiNote A node which can provide packets of specific types - */ -public interface IProviderNode extends INode{ - - /** Link another node as an acceptor - * - * @param requester The object requesting the Acceptor - * @param group - * @return boolean - */ - public boolean linkAcceptor(IAcceptorNode requestor, String group); - - - /** Unlink a provider from the acceptor - * - * @param requestor - * @return - */ - public boolean unlinkAcceptor(IAcceptorNode requestor); - -} |