Advertisement
T99

Interface.java

T99
Jun 14th, 2018
154
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.57 KB | None | 0 0
  1. package com.t99sdevelopment.jcli.dummysubpackage;
  2.  
  3. import java.util.Random;
  4. import java.util.Scanner;
  5.  
  6. public class Interface implements Runnable {
  7.    
  8.     private final Thread interfaceThread;
  9.     private String name;
  10.     private volatile boolean isConnected = false;
  11.     private final boolean allowSuggestedYield;
  12.    
  13.     private final Scanner input;
  14.    
  15.     Interface() {
  16.        
  17.         this(generateName(), false);
  18.        
  19.     }
  20.    
  21.     Interface(String name) {
  22.        
  23.         this(name, false);
  24.        
  25.     }
  26.    
  27.     Interface(boolean allowSuggestedYield) {
  28.        
  29.         this(generateName(), allowSuggestedYield);
  30.        
  31.     }
  32.    
  33.     Interface(String name, boolean allowSuggestedYield) {
  34.        
  35.         this.name = name;
  36.         this.allowSuggestedYield = allowSuggestedYield;
  37.         input = new Scanner(System.in);
  38.         InterfaceManager.registerNewInterface(name, this);
  39.         interfaceThread = new Thread(this, "'" + name + "' Interface");
  40.        
  41.     }
  42.    
  43.     public boolean connect() {
  44.        
  45.         if (isConnected) return false;
  46.         else {
  47.            
  48.             if (InterfaceManager.setCurrentInterface(this)) {
  49.                
  50.                 isConnected = true;
  51.                 if (!interfaceThread.isAlive()) interfaceThread.start();
  52.                 return true;
  53.                
  54.             } else return false;
  55.            
  56.         }
  57.    
  58.     }
  59.    
  60.     public boolean disconnect() {
  61.    
  62.         if (isConnected) {
  63.            
  64.             isConnected = false;
  65.             if (interfaceThread.isAlive()) {
  66.                
  67.                 try {
  68.                    
  69.                     interfaceThread.join();
  70.                    
  71.                 } catch (InterruptedException e) {
  72.                    
  73.                     e.printStackTrace();
  74.                    
  75.                 }
  76.                
  77.             }
  78.            
  79.             return true;
  80.            
  81.         } else {
  82.            
  83.             return false;
  84.            
  85.         }
  86.    
  87.     }
  88.    
  89.     void suggestYield() { // Override this if you want different functionality.
  90.        
  91.         if (allowSuggestedYield) {
  92.            
  93.             disconnect();
  94.            
  95.         }
  96.        
  97.     }
  98.    
  99.     public boolean isConnected() {
  100.    
  101.         if (isConnected && interfaceThread.isAlive() && InterfaceManager.checkIfCurrentInterface(this)) {
  102.            
  103.             return true;
  104.            
  105.         } else return false;
  106.    
  107.     }
  108.    
  109.     boolean doesAllowSuggestedYield() {
  110.        
  111.         return allowSuggestedYield;
  112.        
  113.     }
  114.    
  115.     private static String generateName() {
  116.        
  117.         StringBuilder output = new StringBuilder();
  118.         Random random = new Random();
  119.        
  120.         char[] chars = "ABCDEFGHIJKLMNOPQRSTUVWYXZabcdefghijklmnopqrstuvwyxz1234567890=+".toCharArray();
  121.        
  122.         for (int i = 0; i < 8; i++) {
  123.            
  124.             output.append(chars[random.nextInt(chars.length)]);
  125.            
  126.         }
  127.        
  128.         return output.toString();
  129.        
  130.     }
  131.    
  132.     public String getName() {
  133.        
  134.         return name;
  135.        
  136.     }
  137.    
  138.     public void setName(String name) {
  139.        
  140.         this.name = name;
  141.         interfaceThread.setName(name);
  142.        
  143.     }
  144.    
  145.     @Override
  146.     public void run() {
  147.    
  148.         while (isConnected) {
  149.            
  150.             System.out.print(name + " ~> ");
  151.             CommandInterpreter.interpret(input.nextLine());
  152.             //System.out.println(name + " interface received: " + input.nextLine());
  153.            
  154.         }
  155.    
  156.     }
  157.    
  158. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement