Subversion Repositories programming

Rev

Rev 215 | Rev 217 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 215 Rev 216
Line 20... Line 20...
20
{
20
{
21
    private static int soTimeout = 3000; // 3000 ms timeout = 3 sec
21
    private static int soTimeout = 3000; // 3000 ms timeout = 3 sec
22
    private static DatagramSocket socket;
22
    private static DatagramSocket socket;
23
    private static DatagramPacket packet;
23
    private static DatagramPacket packet;
24
    private static int portNumber = 1337;
24
    private static int portNumber = 1337;
-
 
25
    private static int packetNum = 0;
25
 
26
 
26
    /**
27
    /**
27
     * Method: readPacket()
28
     * Method: readPacket()
28
     * Purpose: Read a packet on the currently opened DatagramSocket,
29
     * Purpose: Read a packet on the currently opened DatagramSocket,
29
     * and return it as a String.
30
     * and return it as a String.
Line 53... Line 54...
53
 
54
 
54
    /**
55
    /**
55
     * Method: writePacket()
56
     * Method: writePacket()
56
     * Purpose: Send a packet to localhost:portNumber.
57
     * Purpose: Send a packet to localhost:portNumber.
57
     */
58
     */
58
    public static boolean writePacket (byte type, byte[] data)
59
    public static boolean writePacket (byte type, byte[] data, int packetNum)
59
    {
60
    {
60
        InetAddress address = null;
61
        InetAddress address = null;
61
        int port = portNumber;
62
        int port = portNumber;
62
 
63
 
63
        try {
64
        try {
Line 66... Line 67...
66
            System.err.println ("Caught UnknownHostException in writePacket(), " +
67
            System.err.println ("Caught UnknownHostException in writePacket(), " +
67
                                "are you sure the system is working?");
68
                                "are you sure the system is working?");
68
            System.exit(1);
69
            System.exit(1);
69
        }
70
        }
70
 
71
 
71
        byte[] buf = P2_Packet.createPacket (type, data);
72
        byte[] buf = P2_Packet.createPacket (type, data, packetNum);
72
        packet = new DatagramPacket (buf, buf.length, address, port);
73
        packet = new DatagramPacket (buf, buf.length, address, port);
73
 
74
 
74
        try {
75
        try {
75
            socket.send (packet);
76
            socket.send (packet);
76
        } catch (PortUnreachableException e) {
77
        } catch (PortUnreachableException e) {
Line 84... Line 85...
84
        }
85
        }
85
 
86
 
86
        return true;
87
        return true;
87
    }
88
    }
88
 
89
 
89
    public static boolean writePacket (byte type)
-
 
90
    {
-
 
91
        byte[] pData = { 0 };
-
 
92
        return writePacket (type, pData);
-
 
93
    }
-
 
94
 
-
 
95
    /**
90
    /**
96
     * Method: guaranteedTransmit()
91
     * Method: guaranteedTransmit()
97
     * Purpose: A wrapper around readPacket() and writePacket() that implements
92
     * Purpose: A wrapper around readPacket() and writePacket() that implements
98
     * a reliable transmit mechanism. It allows you to specify a maximum number
93
     * a reliable transmit mechanism. It allows you to specify a maximum number
99
     * of times to try resending a packet.
94
     * of times to try resending a packet.
Line 101... Line 96...
101
    public static P2_Packet guaranteedTransmit (byte type, byte[] data)
96
    public static P2_Packet guaranteedTransmit (byte type, byte[] data)
102
    {
97
    {
103
        P2_Packet reply;
98
        P2_Packet reply;
104
        int retries = 0;
99
        int retries = 0;
105
 
100
 
106
        writePacket (type, data);
101
        writePacket (type, data, packetNum);
107
        reply = readPacket ();
102
        reply = readPacket ();
108
 
103
 
109
        while (reply == null)
104
        while (reply == null)
110
        {
105
        {
111
            System.err.println ("Packet lost, retransmitting...");
106
            System.err.println ("Packet lost, retransmitting...");
112
            writePacket (type, data);
107
            writePacket (type, data, packetNum);
113
            reply = readPacket ();
108
            reply = readPacket ();
114
            retries++;
109
            retries++;
115
        }
110
        }
116
 
111
 
-
 
112
        if (retries > 0)
-
 
113
            packetNum = 0; //reset packetNum
-
 
114
 
-
 
115
        packetNum++;
117
        return reply;
116
        return reply;
118
    }
117
    }
119
 
118
 
120
    public static P2_Packet guaranteedTransmit (byte type)
119
    public static P2_Packet guaranteedTransmit (byte type)
121
    {
120
    {