Package centralizedModule

Source Code of centralizedModule.CentralizedNetworkManager

package centralizedModule;

import java.net.ServerSocket;
import java.util.ArrayList;

import communication.NetworkManager;
import communication.ReceiveManager;
import communication.Sender;
import communication.TextMessage;

import engine.Main;

import gui.GUIManager;

public class CentralizedNetworkManager extends NetworkManager {
  public GUIManager gui;
  public int peerIndex;
  private ArrayList<Sender> senders;
  private Sender peerSender;
  private ReceiveManager receiver;

  public CentralizedNetworkManager(int peerIndex) {
    this.peerIndex = peerIndex;
  }

  @Override
  public void insert(int pos, char c) {
    System.out.println("I am going to send an insertion " + c + " at " + pos);

    /* Create the message and send it */
    TextMessage tm = new TextMessage(pos, c, TextMessage.INSERT, peerIndex, null);
    if (peerIndex != Main.rootPeer) {
      peerSender.send(tm);
      return;
    }
   
    for (int i = 0; i < Main.peerCount - 1; i++)
      senders.get(i).send(tm);
  }

  @Override
  public void delete(int pos) {
    System.out.println("I am going to send a deletion at " + pos);

    TextMessage tm = new TextMessage(pos, 'q', TextMessage.DELETE, peerIndex, null);
    if (peerIndex != Main.rootPeer) {
      peerSender.send(tm);
      return;
    }
   
    for (int i = 0; i < Main.peerCount - 1; i++)
      senders.get(i).send(tm);
  }

  public void initiateCommThreads() {
    System.out.println("Network Manager creates the threads");

    try {
      /* Create the listener socket */
      ServerSocket listener = new ServerSocket(Main.ports.get(peerIndex));
      receiver = new ReceiveManager(listener, this);

      /* The normal peers won't create other senders */
      if (peerIndex != Main.rootPeer)
        peerSender = new Sender(Main.IPAdresses.get(Main.rootPeer),
            Main.ports.get(Main.rootPeer));
      else {
        senders = new ArrayList<Sender>(Main.peerCount - 1);
       
        /* Create the sender threads */
        for (int i = 0; i < Main.peerCount; i++) {
          if (i == peerIndex)
            continue;

          senders.add(new Sender(Main.IPAdresses.get(i), Main.ports.get(i)));
        }
      }
    } catch (Exception e) {
      System.out.println("Unable to start sockets");
      e.printStackTrace();
    }
  }
 
  public synchronized void onReceive(TextMessage tm) {
    deliverMessage(tm);
   
    if (peerIndex != Main.rootPeer)
      return;
   
    /* The root peer broadcasts the message */
    for (int i = 0; i < Main.peerCount - 1; i++) {
      if (i == tm.sender - 1)
        continue;
      senders.get(i).send(tm);
    }
  }

 
  /* Deliver message to GUI */
  public void deliverMessage(TextMessage request) {

    /* Perform action */
    switch (request.type) {
    case TextMessage.DELETE:
      gui.deleteChar(request.pos);
      break;

    case TextMessage.INSERT:
      gui.insertChar(request.pos, request.c);
      break;
    }
  }


  public void connectToGUI(GUIManager gui) {
    this.gui = gui;
    initiateCommThreads();
  }


  public GUIManager getGUI() {
    return gui;
  }

 
  public void run() {
    System.out.println("Total Order Network manager " + peerIndex + " starts the threads ");

    /* Start the receiver and sender sockets */
    receiver.start();
   
    if (peerIndex != Main.rootPeer) {
      peerSender.start();
      return;
    }
    for (int i = 0; i < Main.peerCount - 1; i++)
      senders.get(i).start();
  }
}
TOP

Related Classes of centralizedModule.CentralizedNetworkManager

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.