Subversion Repositories HomeAutomation

Rev

Details | Last modification | View Log | SVN | RSS feed

Rev Author Line No. Line
15 arune 1
/**
2
 * File created by Jimmy
3
 * at 2003-dec-29 00:04:12
4
 */
5
package Macbeth.Transports;
6
 
7
import Macbeth.System.MbPacketTransport;
8
import Macbeth.System.MbPacket;
9
import Macbeth.System.MbModule;
10
import Macbeth.System.MbKernel;
11
 
12
/**
13
 * A local packet transport for the Macbeth kernel. This will
14
 * deliver packets locally within the Macbeth kernel.
15
 * @author Jimmy
16
 */
17
public class MbLocalTransport extends MbPacketTransport {
18
 
19
    /**
20
     * Creates a new instance of MbLocalTransport.
21
     * @param parentKernel Reference to the parent kernel object.
22
     */
23
    public MbLocalTransport(MbKernel parentKernel) {
24
        super(parentKernel);
25
    }
26
 
27
    /**
28
     * Tries to deliver a packet locally.
29
     * @param p The packet that needs to be delivered.
30
     * @return True if the packet has been delivered successfully.
31
     * False if this packet cannot be delivered locally (that is,
32
     * if it has a destination kernel that differs from "self").
33
     * @throws Macbeth.System.MbPacketTransport.MbPacketDeliveryException if the destination module
34
     * couldn't be found while trying to deliver locally.
35
     */
36
    public boolean deliverPacket(MbPacket p) throws MbPacketTransport.MbPacketDeliveryException {
37
        //we will only deliver locally if destination kernel is "self"
38
        if (p.getDestination().getKernel().equals("self")) {
39
            deliverPacketLocally(p);
40
            return true;
41
        } else {
42
            //throw new MbPacketDeliveryException("Can only deliver to \"self\". Destination kernel was: \"" + p.getDestination().kernel + "\"");
43
            return false;
44
        }
45
    }
46
 
47
    /**
48
     * Returns the name of this transport.
49
     * @return The name of this transport.
50
     */
51
    public String getName() {
52
        return "Local transport";
53
    }
54
 
55
    /**
56
     * Delivers a packet to the specified destination module.
57
     * This delivery will only be performed locally.
58
     * @param p The packet that it to be delivered.
59
     * @throws Macbeth.System.MbPacketTransport.MbPacketDeliveryException if the destination module
60
     * couldn't be found.
61
     */
62
    protected void deliverPacketLocally(MbPacket p) throws MbPacketTransport.MbPacketDeliveryException {
63
        String modulename = p.getDestination().getModule();
64
        MbModule module = null;
65
        //try to locate destination module locally
66
        module = parentKernel.getModule(modulename);
67
        //if module was found
68
        if (module!=null) {
69
            //tell module to receive this packet
70
            module.packetReceived(p);
71
        }
72
        //if module wasn't found
73
        else {
74
            //throw exception
75
            throw new MbPacketDeliveryException("Destination module '" + p.getDestination().getModule() + "' not found.");
76
        }
77
        //we have now delivered the packet successfully, so increase sent packets-counter
78
        packetsSent++;
79
    }
80
}