summaryrefslogtreecommitdiffstats
path: root/vnfs/vLB/DNSClient/src/main/java/FDClient.java
blob: 8665937ae46d101d602c6b2b774c9d7248345a1b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
/*************************************************************************//**
 *
 * Copyright © 2017 AT&T Intellectual Property. All rights reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *        http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 ****************************************************************************/

package main.java;

import java.io.*;
import java.net.*;

/*
 * Client-side Failure Detector (FD) implementation.
 * @param server_addr: IP address of the remote server
 * @param port: the port that the FD service listens for incoming UDP packets
 * @param timeout: how often the FD checks the status of client processes
 * @param debug: debug mode on/off
 */

public class FDClient implements Runnable {
	private String PID;
	private String SERVER_ADDR;
	private int PORT;
	private long TIMEOUT;
	private boolean DEBUG;
	
	public FDClient(String pid, String server_addr, int port, long timeout, boolean debug) throws IOException {
		PID = pid;
		SERVER_ADDR = server_addr;
		PORT = port;
		TIMEOUT = timeout;
		DEBUG = debug;
		(new Thread(this)).start();
	}

	@SuppressWarnings("resource")
	@Override
	public void run() {
		// Define a DatagramSocket object to send packets to the server
		try {
			DatagramSocket sock = new DatagramSocket();
			InetAddress IPAddress = InetAddress.getByName(SERVER_ADDR);

			// Allocate buffer for the PING message
			String content = "PING:" + PID;
			byte[] buffer = content.getBytes();
		
			// Sent a PING message every TIMEOUT milliseconds
			while(true) {
				DatagramPacket packet = new DatagramPacket(buffer, buffer.length, IPAddress, PORT);
				sock.send(packet);

				if(DEBUG) System.out.println("Sent PING message to server " + SERVER_ADDR + ":" + PORT);
				try {
					Thread.sleep(TIMEOUT);
				}
				catch(InterruptedException e) {}
			} 
		} catch(IOException e) {}
	}
}