0% found this document useful (0 votes)
1K views13 pages

Ring Token Algorithm Implementation

The document describes a Java implementation of a ring token algorithm using a server and client model. The server code is provided which handles multiple clients and broadcasts status updates and leader announcements. Client code for a single node is also provided which connects to the server and can send and receive messages.

Uploaded by

jalpAn randeRi
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
1K views13 pages

Ring Token Algorithm Implementation

The document describes a Java implementation of a ring token algorithm using a server and client model. The server code is provided which handles multiple clients and broadcasts status updates and leader announcements. Client code for a single node is also provided which connects to the server and can send and receive messages.

Uploaded by

jalpAn randeRi
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 13

Ring Token Algorithm Implementation

Introduction These project is divided into two parts namely Server and Client. I refer client as NODE. As this is first prototype I have hard-wired the server side code. Lets dive into to java coading ChatServer.java
package server; /** * @owner jalpAn * */ import java.awt.BorderLayout; import java.awt.GridLayout; import java.io.*; import java.util.*; import java.net.*; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JTextArea; public class ChatServer extends JFrame { public static final int PORT = 3990; ArrayList<HandleClient> clients = new ArrayList<HandleClient>(); public void process() throws Exception { ServerSocket server = new ServerSocket(PORT); System.out.println("server is online"); while (true) { Socket client = server.accept(); HandleClient c = new HandleClient(client); clients.add(c); } } public static void main(String[] args) throws Exception { ChatServer c = new ChatServer(); c.buildInterface(); c.process(); } JFrame main; JTextArea iTxt;

Code is copyrighted by jalpAn randeRi

JTextArea oTxt; JLabel chek1 = new JLabel("Down"); JLabel chek2 = new JLabel("Down"); JLabel chek3 = new JLabel("Down"); JLabel chek4 = new JLabel("Down"); JLabel chek5 = new JLabel("Down"); public void buildInterface() { main = new JFrame("Server Dashboard"); main.setAlwaysOnTop(true); BorderLayout borderManager = new BorderLayout(2, 2); main.setLayout(borderManager); JPanel headerPanel = new JPanel(); JLabel label = new JLabel("Network Status"); headerPanel.add(label); main.add(headerPanel, BorderLayout.NORTH); GridLayout gridManger = new GridLayout(5, 2); JPanel contents = new JPanel(); contents.setLayout(gridManger); JLabel node1 = new JLabel("Node 1"); JLabel node2 = new JLabel("Node 2"); JLabel node3 = new JLabel("Node 3"); JLabel node4 = new JLabel("Node 4"); JLabel node5 = new JLabel("Node 5"); contents.add(node1); contents.add(chek1); contents.add(node2); contents.add(chek2); contents.add(node3); contents.add(chek3); contents.add(node4); contents.add(chek4); contents.add(node5); contents.add(chek5); main.add(contents, BorderLayout.CENTER); main.setSize(200, 200); main.setVisible(true); main.setDefaultCloseOperation(EXIT_ON_CLOSE); pack(); }

String msg; protected class HandleClient implements Runnable {

Code is copyrighted by jalpAn randeRi

String name = ""; BufferedReader input; PrintWriter output; public HandleClient(Socket client) throws Exception { input = new BufferedReader(new InputStreamReader(client.getInputStream())); output = new PrintWriter(client.getOutputStream(), true); name = input.readLine(); Thread t = new Thread(this); t.start(); }

public String getUserName() { return name; } public void run() { System.out.println("thread started"); String line; try { while (true) { line = input.readLine();

switch (line) { case "Node1U":chek1.setText("Up");break; case "Node1D":chek1.setText("Down");break; case "Node1L":chek1.setText("Leader"); notifyLeader(1);break; case "Node2U":chek2.setText("Up");break; case "Node2D":chek2.setText("Down");break; case "Node2L":chek2.setText("Leader");notifyLeader(2); break; case "Node3U":chek3.setText("Up");break; case "Node3D":chek3.setText("Down");break; case "Node3L":chek3.setText("Leader"); notifyLeader(3); break; case "Node4U":chek4.setText("Up");break; case "Node4D":chek4.setText("Down");break; case "Node4L":chek4.setText("Leader"); notifyLeader(4); break; case "Node5U":chek5.setText("Up");break; case "Node5D":chek5.setText("Down");break; case "Node5L":chek5.setText("Leader"); notifyLeader(5); break; case "Nxt1":sendMsg("Node1",getNextNode("Node1")); break; case "Nxt2":sendMsg("Node2",getNextNode("Node2")); break; case "Nxt3":sendMsg("Node3",getNextNode("Node3")); break; case "Nxt4":sendMsg("Node4",getNextNode("Node4")); break; case "Nxt5":sendMsg("Node5",getNextNode("Node5")); break; default:

Code is copyrighted by jalpAn randeRi

if(line.contains(":")){ System.out.println("in if"); String[] temp=line.split(":"); String msg=temp[0]; String node=temp[1]; System.out.println("Destination node is "+node+" msg is "+msg); sendMsg(node, msg); }else{ System.out.println(line); } break; }

} } catch (Exception ex) { System.out.println(ex.getMessage()); } } HandleClient c; public String getNextNode(String CurrentNode){ String nextNode=""; switch(CurrentNode){ case "Node1":if(chek2.getText().equalsIgnoreCase("Up")){ nextNode="Node2"; }else if(chek3.getText().equalsIgnoreCase("Up")){ nextNode="Node3"; }else if(chek4.getText().equalsIgnoreCase("Up")){ nextNode="Node4"; }else if(chek5.getText().equalsIgnoreCase("Up")){ nextNode="Node5"; } break; case "Node2":if(chek3.getText().equalsIgnoreCase("Up")){ nextNode="Node3"; }else if(chek4.getText().equalsIgnoreCase("Up")){ nextNode="Node4"; }else if(chek5.getText().equalsIgnoreCase("Up")){ nextNode="Node5"; }else if(chek1.getText().equalsIgnoreCase("Up")){ nextNode="Node1"; } break;

Code is copyrighted by jalpAn randeRi

case "Node3":if(chek4.getText().equalsIgnoreCase("Up")){ nextNode="Node4"; }else if(chek5.getText().equalsIgnoreCase("Up")){ nextNode="Node5"; }else if(chek1.getText().equalsIgnoreCase("Up")){ nextNode="Node1"; }else if(chek2.getText().equalsIgnoreCase("Up")){ nextNode="Node2"; } break; case "Node4":if(chek5.getText().equalsIgnoreCase("Up")){ nextNode="Node5"; }else if(chek1.getText().equalsIgnoreCase("Up")){ nextNode="Node1"; }else if(chek2.getText().equalsIgnoreCase("Up")){ nextNode="Node2"; }else if(chek3.getText().equalsIgnoreCase("Up")){ nextNode="Node3"; } break; case "Node5":if(chek1.getText().equalsIgnoreCase("Up")){ nextNode="Node1"; }else if(chek2.getText().equalsIgnoreCase("Up")){ nextNode="Node2"; }else if(chek3.getText().equalsIgnoreCase("Up")){ nextNode="Node3"; }else if(chek4.getText().equalsIgnoreCase("Up")){ nextNode="Node4"; } break; }

return nextNode ; } private void sendMsg(String CurrentNode, String nextNode) { System.out.println("Current is "+CurrentNode+" nextNode is "+nextNode); HandleClient temp; for(HandleClient c1: clients){ if(c1.getUserName().equals(CurrentNode)){ temp=c1; c1.output.println(nextNode); System.out.println("OutMSG to c1 is "+c1.getUserName()+" msg "+nextNode); return; } } }

Code is copyrighted by jalpAn randeRi

private void notifyLeader(int i) { System.out.println("in notify"); switch(i){ case 1: if(chek1.getText().equalsIgnoreCase("Leader")){ sendMsg("Node1","leader is 1"); } if(chek2.getText().equalsIgnoreCase("UP")){ sendMsg("Node2","leader is 1"); } if(chek3.getText().equalsIgnoreCase("UP")){ sendMsg("Node3","leader is 1"); } if(chek4.getText().equalsIgnoreCase("UP")){ sendMsg("Node4","leader is 1"); } if(chek5.getText().equalsIgnoreCase("UP")){ sendMsg("Node5","leader is 1"); } break; case 2: if(chek1.getText().equalsIgnoreCase("UP")){ sendMsg("Node1","leader is 2"); } if(chek2.getText().equalsIgnoreCase("Leader")){ sendMsg("Node2","leader is 2"); } if(chek3.getText().equalsIgnoreCase("UP")){ sendMsg("Node3","leader is 2"); } if(chek4.getText().equalsIgnoreCase("UP")){ sendMsg("Node4","leader is 2"); } if(chek5.getText().equalsIgnoreCase("UP")){ sendMsg("Node5","leader is 2"); } break; case 3: if(chek1.getText().equalsIgnoreCase("UP")){ sendMsg("Node1","leader is 3"); } if(chek2.getText().equalsIgnoreCase("UP")){ sendMsg("Node2","leader is 3"); } if(chek3.getText().equalsIgnoreCase("Leader")){ sendMsg("Node3","leader is 3"); } if(chek4.getText().equalsIgnoreCase("UP")){ sendMsg("Node4","leader is 3"); }

Code is copyrighted by jalpAn randeRi

if(chek5.getText().equalsIgnoreCase("UP")){ sendMsg("Node5","leader is 3"); } break; case 4: if(chek1.getText().equalsIgnoreCase("UP")){ sendMsg("Node1","leader is 4"); } if(chek2.getText().equalsIgnoreCase("UP")){ sendMsg("Node2","leader is 4"); } if(chek3.getText().equalsIgnoreCase("UP")){ sendMsg("Node3","leader is 4"); } if(chek4.getText().equalsIgnoreCase("Leader")){ sendMsg("Node4","leader is 4"); } if(chek5.getText().equalsIgnoreCase("UP")){ sendMsg("Node5","leader is 4"); } break; case 5: if(chek1.getText().equalsIgnoreCase("UP")){ sendMsg("Node1","leader is 5"); } if(chek2.getText().equalsIgnoreCase("UP")){ sendMsg("Node2","leader is 5"); } if(chek3.getText().equalsIgnoreCase("UP")){ sendMsg("Node3","leader is 5"); } if(chek4.getText().equalsIgnoreCase("UP")){ sendMsg("Node4","leader is 5"); } if(chek5.getText().equalsIgnoreCase("Leader")){ sendMsg("Node5","leader is 5"); } break; } } } }

Lets dive into NODE NODE1.java

Code is copyrighted by jalpAn randeRi

/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package ringcorordinataralgo; import client.ChatClient; import java.util.logging.Level; import java.util.logging.Logger; /** * * @author jalpAn */ public class Node1 { public static void main(String[] args){ Node1 n=new Node1(); try { n.start(); } catch (Exception ex) { Logger.getLogger(Node1.class.getName()).log(Level.SEVERE, null, ex); } } private void start() { try { ChatClient c=new ChatClient("Node1", "localhost", 1); c.buildInterface(); } catch (Exception ex) { Logger.getLogger(Node1.class.getName()).log(Level.SEVERE, null, ex); } } }

As you can see here I have used the ChatClient.java class. Lets examine this class ChatClinet.java package client; import java.io.*; import java.net.*; import javax.swing.*; import java.awt.*; import java.awt.event.*; public class ChatClient extends JFrame { int NO;

Code is copyrighted by jalpAn randeRi

String uname; PrintWriter pw; BufferedReader br; JTextArea incomingMsgsTxt; JTextField usrIpTxt; JButton btnSend, btnLogoff, btnLogin; Socket client; public ChatClient(String uname, String servername, int i) throws Exception { super(uname); this.uname = uname; this.NO = i; client = new Socket(servername, 3990); br = new BufferedReader(new InputStreamReader(client.getInputStream())); pw = new PrintWriter(client.getOutputStream(), true); pw.println(uname); MessagesThread m = new MessagesThread(); Thread t = new Thread(m); t.start(); } JButton connect = new JButton("Connect"); public void buildInterface() { btnSend = new JButton("Election"); connect.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { String cmd = connect.getText(); switch (cmd) { case "Connect": pw.println("Node" + NO + "U"); connect.setText("Disconnect"); break; case "Disconnect": pw.println("Node" + NO + "D"); connect.setText("Connect"); break; }

} }); incomingMsgsTxt = new JTextArea(); incomingMsgsTxt.setRows(10); incomingMsgsTxt.setColumns(10);

Code is copyrighted by jalpAn randeRi

incomingMsgsTxt.setEditable(false); JScrollPane sp = new JScrollPane(incomingMsgsTxt, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); add(sp, "Center"); JPanel bp = new JPanel(new FlowLayout()); bp.add(btnSend); bp.add(connect); add(bp, "South"); btnSend.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent arg0) { // starting election set the flag true Init_flag=true; //ask for next node sendMsg("Nxt" + NO); //recving next node informatoin

} });

setSize(250, 200); setVisible(true); setDefaultCloseOperation(EXIT_ON_CLOSE); setAlwaysOnTop(true); pack(); } public void sendMsg(String test) { pw.println(test); } public void sendMsg(String msg, String node) { pw.println(node + ":" + msg); } public static void main(String[] args) { try { ChatClient c = new ChatClient("Node", "localhost", 1); c.buildInterface(); } catch (Exception ex) { System.out.println("Exception " + ex.getMessage()); } } String line;

Code is copyrighted by jalpAn randeRi

String Msg="{"; boolean Init_flag=false; String saveMsg =""; public void reciveMsg() { try { while (true) { line = br.readLine(); System.out.println("recvied > "+line); incomingMsgsTxt.append(line + "\n"); if(line.contains("Node")){ //recived next Node location if(Init_flag){ Msg="{"+NO+","; sendMsg(line,Msg); }else{ sendMsg(line,saveMsg); } }else if(line.contains("{")){ // msg recivied form other node as a part of election if(line.contains(NO+"")){//determine who is leader determineLeader(line); }else{ //append own NO in the msg by saving it to temp saveMsg=line+NO+","; sendMsg("Nxt"+NO); } } } } catch (Exception ex) { } } private void determineLeader(String line) { System.out.println("Determine Leader "+line); String[] temp=line.split(","); int[] nodes=new int[temp.length]; int i=0; for(String s: temp){ if(s.contains("{")){ nodes[i]=Integer.parseInt(s.substring(1)); }else{ nodes[i]=Integer.parseInt(s); } i++; } int leader=nodes[0];

Code is copyrighted by jalpAn randeRi

for(i=0;i<nodes.length;i++){ if(nodes[i]>leader){ leader=nodes[i]; } } System.out.println("leader is "+leader); sendMsg("Node"+leader+"L");

} class MessagesThread implements Runnable { @Override public void run() { System.out.println("thread is client "); reciveMsg(); } } }

//

HERE GOES THE OUTPUT

Initial State

Connect State

Code is copyrighted by jalpAn randeRi

Output State

Code is copyrighted by jalpAn randeRi

You might also like

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy