Package org.telehash

Source Code of org.telehash.SwitchState

package org.telehash;

import java.net.InetSocketAddress;
import java.util.Map;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.telehash.model.Line;
import org.telehash.model.TelehashFactory;

import com.google.common.collect.MapMaker;

public class SwitchState {

  static private Logger logger = LoggerFactory.getLogger(SwitchState.class);
 
  static private TelehashFactory tf = TelehashFactory.eINSTANCE;
 
  public enum ConnectionStatus {
    SEEDING,
    CONNECTED,
    OFFLINE
  };
 
  private ConnectionStatus connectionStatus = ConnectionStatus.OFFLINE;

  private InetSocketAddress selfAddress = null;

  private Hash selfHash = null;

  private Map<Hash, Line> lines = new MapMaker().makeMap();

  private InetSocketAddress seedAddress;
 
  public ConnectionStatus getConnectionStatus() {
    return connectionStatus;
  }

  public void setState(ConnectionStatus state) {
    this.connectionStatus = state;
  }

  public InetSocketAddress getSelfAddress() {
    return selfAddress;
  }

  public void setSelfAddress(InetSocketAddress selfAddress) {
    this.selfAddress = selfAddress;
    this.selfHash = Hash.of(selfAddress);
  }

  public Hash getSelfHash() {
    return selfHash;
  }

  public Map<Hash, Line> getLines() {
    return lines;
  }

  public InetSocketAddress getSeedAddress() {
    return seedAddress;
  }

  public void setSeedAddress(InetSocketAddress seedAddress) {
    this.seedAddress = seedAddress;
  }

  public Line getOrCreateLine(InetSocketAddress endpoint) {
    if (endpoint == null) {
      return null;
    }
   
    Hash endHash = Hash.of(endpoint);
    Line line = lines.get(endHash);
    if (line == null || !line.getAddress().equals(endpoint)) {
      line = tf.createLine().withAddress(endpoint).withEnd(endHash);
      line.getNeighbors().add(endHash);
      lines.put(endHash, line);
    }
    return line;
  }
 
  public void removeLine(Hash end) {
    lines.remove(end);
  }

  public void seeding(final Runnable runnable) {
    connectionStatus = ConnectionStatus.SEEDING;
    logger.debug("SEEDING");
    new Thread(){
      public void run() {
        runnable.run();
      };
    }.start();
  }

  public void connected(Runnable runnable) {
    connectionStatus = ConnectionStatus.CONNECTED;
    logger.debug("CONNECTED");
    runnable.run();
  }
 
  public void offline(Runnable runnable) {
    selfAddress = null;
    selfHash = null;
    lines.clear();
    connectionStatus = ConnectionStatus.OFFLINE;
    logger.debug("OFFLINE");
    runnable.run();
  }

}
TOP

Related Classes of org.telehash.SwitchState

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.