//Detta är u1.java filen! import java.awt.*; import java.net.*; import java.io.*; import java.lang.*; import java.util.*; //utökar funktionalitet från u1b som subklassas,en tråd i klassen och två trådar som egna subklasser till Thread public class u1 extends u1b implements Runnable { Thread t; lyssna l; SendConnected s; public Vector inloggade; public Vector tid; Date nutid = new Date(); public void koppla_till() { tid = new Vector(); inloggade = new Vector(); super.koppla_till(); l=new lyssna(this); //l=new lyssna(in,textArea1); l.start(); s=new SendConnected(this); s.start(); } //--------------------------------------------------------------------------------------------------------------------------------------------------------- //override på metod i u1a public void koppla_fran() { list1.clear(); l.stop(); super.koppla_fran(); t.stop(); s.stop(); sock=null; } //-------------------------------------------------------------- public void skicka() { super.skicka(); } //-------------------------------------------------------- //tråden t startas public void start() { t=new Thread(this); t.start(); } //i runmetoden anropas med hjälp av tråden t metoden kollalista var 5 sekund public void run() { while(true) { kollalista(); try { t.sleep(5000); } catch(InterruptedException i){}; }//enddwhile }//endrun //------------------------------------------------- //metod för inläggning av inloggade personer, tar emot namn och lägger in dessa personer i en vektor samt tider när de sänder "connected" i en annan vektor public void inloggadekoll(String a){ int i=-1; i=inloggade.indexOf(a); if (i<0){ list1.addItem(a); inloggade.addElement(a); tid.addElement(new Long(new Date().getTime())); } else tid.setElementAt(new Long(new Date().getTime()),i); } //borttagning av avloggade personer om de inte sänt connected de senaste 60 sekunderna public void kollalista(){ int i; for (i=0;i60000){ inloggade.removeElementAt(i); tid.removeElementAt(i); list1.delItem(i); } } } }//endclassu1 // tråden lyssna subklassar Thread class lyssna extends Thread { u1 app; //lyssnas konstruktor som tar klass u1 som argument public lyssna(u1 a) { app = a; //start(); //samma som l.start högst upp; } //runmetoden tar emot namn på personer som sänder "connected" från taemot i u1b, detta kollas med hjålp av tråden tio gånger per sekund, namnet på inloggad skickas med i anropet till u1s inloggadekoll public void run() { String namn; for(;;) { namn = app.taemot(); if (namn != null) app.inloggadekoll(namn); //System.out.println("lyssna kör"); try{ sleep(100); } catch(InterruptedException e) {} }//endfor }//endrun }//endclass // tråden SendConnected subklassar Thread class SendConnected extends Thread { u1 app; // SendConnecteds konstruktor som tar klass u1 som argument public SendConnected(u1 a){ app=a; //start(); } //i runmetoden sänds med hjälp av tråden "connected" var 20 sekund public void run() { for(;;) { app.out.println("<<>> \n"); try{ sleep(20000); } catch(InterruptedException e) {} //måste stå måsvingar efter catch } } }