72
Events und Streams

Events und Streams. Ein Virtueller Verstärker Stream (fast immer Daten) Event (fast nie Daten) Stream (fast immer Daten)

Embed Size (px)

Citation preview

Page 1: Events und Streams. Ein Virtueller Verstärker Stream (fast immer Daten) Event (fast nie Daten) Stream (fast immer Daten)

Events und Streams

Page 2: Events und Streams. Ein Virtueller Verstärker Stream (fast immer Daten) Event (fast nie Daten) Stream (fast immer Daten)

Ein „Virtueller Verstärker“

Stream

(fast

immer D

aten)

Event(fast nie Daten)

Stream

(fast imm

er Daten)

Page 3: Events und Streams. Ein Virtueller Verstärker Stream (fast immer Daten) Event (fast nie Daten) Stream (fast immer Daten)

Main Loop, go home

main{RepeatMyEvent=CheckNextEvent()If(MyEvent=null)

{Abarbeiten}Else

{HandleEvent(myEvent)}Until(quit)

Page 4: Events und Streams. Ein Virtueller Verstärker Stream (fast immer Daten) Event (fast nie Daten) Stream (fast immer Daten)

Klassische Abfragen

EventSource

GetStatus

HauptprogrammDas Hauptprogramm fragt zu bestimmten Zeiten den Status aller möglichen EventSources ab.

Page 5: Events und Streams. Ein Virtueller Verstärker Stream (fast immer Daten) Event (fast nie Daten) Stream (fast immer Daten)

Events und Listeners

EventSource

Event

ListenerDie EventSource muss den Listener kennen !

Page 6: Events und Streams. Ein Virtueller Verstärker Stream (fast immer Daten) Event (fast nie Daten) Stream (fast immer Daten)

Beispiel

Button

ActionEvent

ActionListeneraddActionlistener(ActionListener)MyListener=ActionListener

Falls was passiert:MyListener.actionPerformed()

actionPerformed(ActionEvent)

Page 7: Events und Streams. Ein Virtueller Verstärker Stream (fast immer Daten) Event (fast nie Daten) Stream (fast immer Daten)

In unserem Fall

• FloatEvents

• BooleanEvents =? ActionEvents

• StringEvents =? SocketEvents

• IntegerEvents =? AdjustmentEvents

Page 8: Events und Streams. Ein Virtueller Verstärker Stream (fast immer Daten) Event (fast nie Daten) Stream (fast immer Daten)

FloatControl

• FloatControl?

• FloatListener

Page 9: Events und Streams. Ein Virtueller Verstärker Stream (fast immer Daten) Event (fast nie Daten) Stream (fast immer Daten)

FloatControl?

• ansprechendes Design

• intuitive Kontrollelemente

Page 10: Events und Streams. Ein Virtueller Verstärker Stream (fast immer Daten) Event (fast nie Daten) Stream (fast immer Daten)

Aufrufende Klasse

FloatKreis

FloatListener

EventListener

FloatPanel

FloatControl

erst

ellt

erst

ellt

setValue

FloatLED

Event

Event

Event

Event

extends

Page 11: Events und Streams. Ein Virtueller Verstärker Stream (fast immer Daten) Event (fast nie Daten) Stream (fast immer Daten)

Events

EventFloatListener

FloatPanel

Aufrufende Klasse

EventE

vent

Event

Event

Page 12: Events und Streams. Ein Virtueller Verstärker Stream (fast immer Daten) Event (fast nie Daten) Stream (fast immer Daten)

package nano.awt;import java.util.*;

public interface FloatListener extends EventListener{public void FloatEventPerformed(double zahl);

}

FloatListener

Page 13: Events und Streams. Ein Virtueller Verstärker Stream (fast immer Daten) Event (fast nie Daten) Stream (fast immer Daten)

Klasse FloatDesign

• Definiert Farben der Kontrollelemente wie z.B. Zeiger-und Kreisfarbe, sowie -grösse

• Über Konstruktoren verschiedene Varianten vordefiniert

• Über Methoden auf einzelne Einstellungen zugreifbar

• weiteres Vorgehen und Zukunft der Klasse noch nicht klar, u.a. auch wegen Designern

Page 14: Events und Streams. Ein Virtueller Verstärker Stream (fast immer Daten) Event (fast nie Daten) Stream (fast immer Daten)

Vorteile

• Möglichkeit der individuellen Gestaltung der Kontrollelemente (Farben)

• nur eine einmalige Definition nötig

• wenn gewünscht für alle Elemente gültig

Page 15: Events und Streams. Ein Virtueller Verstärker Stream (fast immer Daten) Event (fast nie Daten) Stream (fast immer Daten)

Technische Spezifikationenvon TCP / IP

Page 16: Events und Streams. Ein Virtueller Verstärker Stream (fast immer Daten) Event (fast nie Daten) Stream (fast immer Daten)

Was ist ein „Socket“ ?

• Engl. „Stecker“, ist aber eher ein Kabel.Kommt von den Inet-Ports.

• Vollständige Adressierung besteht ausIP-Nummer und Port-Nummer

• Eine bidirektionale Verbindung zwischen zwei Internet-Ports.

Page 17: Events und Streams. Ein Virtueller Verstärker Stream (fast immer Daten) Event (fast nie Daten) Stream (fast immer Daten)
Page 18: Events und Streams. Ein Virtueller Verstärker Stream (fast immer Daten) Event (fast nie Daten) Stream (fast immer Daten)

Verbindungsaufbau

• Einer ist Server (Derjenige der auf die Verbindung gewartet hat)

• Einer ist Client (Derjenige der die Verbindung Initiiert hat)

• Handshaking

• Pakete werden ausgetauscht (vgl. UDP)

Page 19: Events und Streams. Ein Virtueller Verstärker Stream (fast immer Daten) Event (fast nie Daten) Stream (fast immer Daten)

Virtuelle Kabel

Page 20: Events und Streams. Ein Virtueller Verstärker Stream (fast immer Daten) Event (fast nie Daten) Stream (fast immer Daten)

Socket als Kabel

• LabView als schlechtes Vorbild

Wir nehmen Streams anstelle von Zahlen

Jede Steckdose erhält den Befehl plug(DataLine)

Sie hat eine Instanzvariable MyDestination

Page 21: Events und Streams. Ein Virtueller Verstärker Stream (fast immer Daten) Event (fast nie Daten) Stream (fast immer Daten)

Abstrakte Klasse „DataLine“ ?

• Zwei Implementierungen:– TCP / IP Socket (InetAddr, Port, R/W)– Pipe (Pointer auf Pufferbereich)– (+) Schnellere Performance

• Eine einzige Implementierung:– TCP / IP Socket (InetAddr, Port, R/W)– (+) Universeller, „The Net is the Computer“

Page 22: Events und Streams. Ein Virtueller Verstärker Stream (fast immer Daten) Event (fast nie Daten) Stream (fast immer Daten)

Stecker-Metapher

• Signal kommt immer aus einer Dose (weiblich)

• Anzeigegeräte (Oszi, Fluke, etc.) haben nur männliche Stecker

• Damit ist jeder Port männlich oder weiblich

Page 23: Events und Streams. Ein Virtueller Verstärker Stream (fast immer Daten) Event (fast nie Daten) Stream (fast immer Daten)
Page 24: Events und Streams. Ein Virtueller Verstärker Stream (fast immer Daten) Event (fast nie Daten) Stream (fast immer Daten)

Signale in „Sockets“

• Elektronisches Signal ist eine FunktionR R t U(t)

• Das Signal soll sich selbst beschreiben.

• Beschreibung im Ortsraum

– Langsame Signale, (Tiefpass)

• Beschreibung im Fourier-Raum

– Schnelle Signale, (Hochpass)

II

Page 25: Events und Streams. Ein Virtueller Verstärker Stream (fast immer Daten) Event (fast nie Daten) Stream (fast immer Daten)

Doppelstecker

Page 26: Events und Streams. Ein Virtueller Verstärker Stream (fast immer Daten) Event (fast nie Daten) Stream (fast immer Daten)

Selbstbeschreibendes Signal

• TCP/IP Päckchen von konstanter Grösse(Derzeit 256Byte)

• In JAVA: Werte von –128 bis +127 !!• Erstes Byte=-128 bedeutet

Achtung: Beschreibung• Zweites Byte gibt an, wieviele Pakete

Beschreibung sind.

Page 27: Events und Streams. Ein Virtueller Verstärker Stream (fast immer Daten) Event (fast nie Daten) Stream (fast immer Daten)

Wie beschreibt sich das Signal

• XML-Text oder was????

• Beschreibung soll beliebig offen sein.

Page 28: Events und Streams. Ein Virtueller Verstärker Stream (fast immer Daten) Event (fast nie Daten) Stream (fast immer Daten)

Dokumentation undKooperation miteinem Classpath

Page 29: Events und Streams. Ein Virtueller Verstärker Stream (fast immer Daten) Event (fast nie Daten) Stream (fast immer Daten)

JAVADOC

• Auf Nanoworld2 unterD:\development\jdk1.3\docs\tooldocs\win32\javadoc.html (Muss noch veröffentlicht werden)

• Pakete müssen einzeln angegeben werden

• Bilder und gewisse Tags sind möglich.

Page 30: Events und Streams. Ein Virtueller Verstärker Stream (fast immer Daten) Event (fast nie Daten) Stream (fast immer Daten)
Page 31: Events und Streams. Ein Virtueller Verstärker Stream (fast immer Daten) Event (fast nie Daten) Stream (fast immer Daten)

Struktur unseres Classpath

• nano.paketname.*

• Paketname sollte dem von java.lang entsprechen.– Bsp. nano.awt.*;

Page 32: Events und Streams. Ein Virtueller Verstärker Stream (fast immer Daten) Event (fast nie Daten) Stream (fast immer Daten)

Wer darf in den Classpath ?

• Fertige Klassen (Das bedeutet: Jede Änderung muss mit einer Versionsänderung und dem zugehörigen Datum verbunden sein)

• Vollständig dokumentiert in Javadoc.

• Alle modifiers sind durchdacht.

• Alle Setter und Getter sind vorhanden.

Page 33: Events und Streams. Ein Virtueller Verstärker Stream (fast immer Daten) Event (fast nie Daten) Stream (fast immer Daten)

Datenbanken

Client Client

ServerController

Experiment

Page 34: Events und Streams. Ein Virtueller Verstärker Stream (fast immer Daten) Event (fast nie Daten) Stream (fast immer Daten)

Was für Klassen gibt es schon?

Beachte die strikte Trennung vonFunktionalität und GUI

Steuerung erfolgt über Kommandos

GUI generiert Kommandos(vgl. TCL/TK unter UNIX)

Page 35: Events und Streams. Ein Virtueller Verstärker Stream (fast immer Daten) Event (fast nie Daten) Stream (fast immer Daten)

Vorhandene Pakete

• Package nano.awt(Alles was mit GUI zu tun hat)

• Package nano.net(Alles was mit Netzwerk und Streams zu tun hat)

• Package nano.compute(Alles was………..weiss auch noch nicht)

Page 36: Events und Streams. Ein Virtueller Verstärker Stream (fast immer Daten) Event (fast nie Daten) Stream (fast immer Daten)

Das Paket nano.compute

Page 37: Events und Streams. Ein Virtueller Verstärker Stream (fast immer Daten) Event (fast nie Daten) Stream (fast immer Daten)

Parser-Problem

• Wir brauchen eine Zuordnung String-Methode

• Realisiert analog awt.event(Event-Methode)

Page 38: Events und Streams. Ein Virtueller Verstärker Stream (fast immer Daten) Event (fast nie Daten) Stream (fast immer Daten)
Page 39: Events und Streams. Ein Virtueller Verstärker Stream (fast immer Daten) Event (fast nie Daten) Stream (fast immer Daten)
Page 40: Events und Streams. Ein Virtueller Verstärker Stream (fast immer Daten) Event (fast nie Daten) Stream (fast immer Daten)

Simulator API

– AddCommand(String, CommandExecutor)– AddInt– AddDouble– AddString– AddBoolean– SetBoolean(String, boolean), sb(), etc.

Page 41: Events und Streams. Ein Virtueller Verstärker Stream (fast immer Daten) Event (fast nie Daten) Stream (fast immer Daten)
Page 42: Events und Streams. Ein Virtueller Verstärker Stream (fast immer Daten) Event (fast nie Daten) Stream (fast immer Daten)

Sprachdefinition Basiswortschatz

• Definiert in der Klasse nano.compute.Simulator:– Set

• Parameter: name, valueBeispiel: command=set, name=speed, value=131.5

– Get• Parameter: name

– Stop• Parameter: keine

– Start• Parameter: keine

Page 43: Events und Streams. Ein Virtueller Verstärker Stream (fast immer Daten) Event (fast nie Daten) Stream (fast immer Daten)

Nano.net

Page 44: Events und Streams. Ein Virtueller Verstärker Stream (fast immer Daten) Event (fast nie Daten) Stream (fast immer Daten)
Page 45: Events und Streams. Ein Virtueller Verstärker Stream (fast immer Daten) Event (fast nie Daten) Stream (fast immer Daten)

EventClientLocal Port

Remote IP,Port

StreamClientLocal Port

Remote IP,Port

EventServerLocal Port

StreamServerLocal Port

EventSocketListener

EventSocketListener

put

put

plug

Page 46: Events und Streams. Ein Virtueller Verstärker Stream (fast immer Daten) Event (fast nie Daten) Stream (fast immer Daten)
Page 47: Events und Streams. Ein Virtueller Verstärker Stream (fast immer Daten) Event (fast nie Daten) Stream (fast immer Daten)

EventClient

Pool (De- & Multiplexer)

EventClient

StreamClient

EventClient

StreamClient

EventClient

StreamClient

EventSocket-Listener

EventClient

StreamServer

MySQL

www

www

www

www

www

www

www

www

Page 48: Events und Streams. Ein Virtueller Verstärker Stream (fast immer Daten) Event (fast nie Daten) Stream (fast immer Daten)

Pool_UI

• Pool_UI?

• Eigenarten der Tabellen in Java

Page 49: Events und Streams. Ein Virtueller Verstärker Stream (fast immer Daten) Event (fast nie Daten) Stream (fast immer Daten)

Klasse Pool

• Verwaltung und Bereitstellung von Benutzerdaten, wie:– Anzahl der User im Pool– Name, IP-Adresse und Portnummer– User connected?– addUser()

Page 50: Events und Streams. Ein Virtueller Verstärker Stream (fast immer Daten) Event (fast nie Daten) Stream (fast immer Daten)

Pool_UI

• Graphische Benutzeroberfläche der Klasse Pool

Page 51: Events und Streams. Ein Virtueller Verstärker Stream (fast immer Daten) Event (fast nie Daten) Stream (fast immer Daten)
Page 52: Events und Streams. Ein Virtueller Verstärker Stream (fast immer Daten) Event (fast nie Daten) Stream (fast immer Daten)
Page 53: Events und Streams. Ein Virtueller Verstärker Stream (fast immer Daten) Event (fast nie Daten) Stream (fast immer Daten)

Pool_UI Pool

TableModel

JTable

setUser

Tabelle

erst

ellt

Frägt ab

Page 54: Events und Streams. Ein Virtueller Verstärker Stream (fast immer Daten) Event (fast nie Daten) Stream (fast immer Daten)

Tabellen

•Model - Viewer Konzept

Page 55: Events und Streams. Ein Virtueller Verstärker Stream (fast immer Daten) Event (fast nie Daten) Stream (fast immer Daten)

Früher

DefaultTableModelDaten JTable

Page 56: Events und Streams. Ein Virtueller Verstärker Stream (fast immer Daten) Event (fast nie Daten) Stream (fast immer Daten)

Heute

TableModel

Model Viewer

Daten

Page 57: Events und Streams. Ein Virtueller Verstärker Stream (fast immer Daten) Event (fast nie Daten) Stream (fast immer Daten)

Zuständigkeit

• TableModel:

Datenerstellung, -aufbereitung, -berechnung

• JTable:

Darstellung der Daten

Page 58: Events und Streams. Ein Virtueller Verstärker Stream (fast immer Daten) Event (fast nie Daten) Stream (fast immer Daten)

Vorteile des Model-Viewer Konzeptes

• skalierbar

• Einfachere Handhabung von dynamischen und editierbaren Tabellen

• Möglichkeit von verschiedenen Viewern

• Geschwindigkeit

Page 59: Events und Streams. Ein Virtueller Verstärker Stream (fast immer Daten) Event (fast nie Daten) Stream (fast immer Daten)

How To

Page 60: Events und Streams. Ein Virtueller Verstärker Stream (fast immer Daten) Event (fast nie Daten) Stream (fast immer Daten)

AbstractTableModel

public abstract class AbstractTableModel extends Objects implements TableModel

• stellt default Implementierungen für die meisten Methoden des TableModel zur Verfügung

• kümmert sich um die Listener und Events

Page 61: Events und Streams. Ein Virtueller Verstärker Stream (fast immer Daten) Event (fast nie Daten) Stream (fast immer Daten)

Erstellen einer Tabelle mithilfe des AbstractTableModels

Implementation von folgenden Methoden notwendig:

• public int getRowCount();

• public int getColumnCount();

• public Object getValueAt(int row, int column);

Page 62: Events und Streams. Ein Virtueller Verstärker Stream (fast immer Daten) Event (fast nie Daten) Stream (fast immer Daten)

Weitere nützliche Methoden

• public String getColumnName(int col)

• public String getColumnCount() / getRowCount

• public Class getColumnClass(int col)

• public boolean isCellEditable(int row, int col)

Page 63: Events und Streams. Ein Virtueller Verstärker Stream (fast immer Daten) Event (fast nie Daten) Stream (fast immer Daten)

Erstellen einer 10*10 - Tabelle

TableModel beispielModel = new AbstractTableModel(){

public int getRowCount() {return 10;}

public int getColumnCount() {return 10;}

public Object getValueAt(int row, int column) {return new Integer(row*col);}

}

JTable table = new JTable(beispielModel);

JScrollPane scrollpane = new JScrollPane(table);

Page 64: Events und Streams. Ein Virtueller Verstärker Stream (fast immer Daten) Event (fast nie Daten) Stream (fast immer Daten)

TableCellRenderer

• Renderer: Zuständig für die Darstellung der Zellen

• JTable besitzt Standard-Renderer

• Möglichkeit der Individuellen Darstellung von Zellen

• Nachteil: recht grosser Aufwand für Effizienz nötig

Page 65: Events und Streams. Ein Virtueller Verstärker Stream (fast immer Daten) Event (fast nie Daten) Stream (fast immer Daten)

Verschieben der Kolonnen

Page 66: Events und Streams. Ein Virtueller Verstärker Stream (fast immer Daten) Event (fast nie Daten) Stream (fast immer Daten)

• Jede Kolonne eigene ID (default: Name der Kolonne)

• Vorteile: Verschieben der Kolonnen ohne sich um die Änderung der Reihenfolge kümmern zu müssen

-> JTable rechnet intern mit ID und stellt es richtig dar

Page 67: Events und Streams. Ein Virtueller Verstärker Stream (fast immer Daten) Event (fast nie Daten) Stream (fast immer Daten)

Zusammenarbeit mit demSmartSPM Projekt

Hardware-Programmierung

Page 68: Events und Streams. Ein Virtueller Verstärker Stream (fast immer Daten) Event (fast nie Daten) Stream (fast immer Daten)
Page 69: Events und Streams. Ein Virtueller Verstärker Stream (fast immer Daten) Event (fast nie Daten) Stream (fast immer Daten)

Stand der Dinge

HW.DLL

GUI.DLL

MIDDLE.DLLCOMM.DLL

Mainframe

TCP/IP

Page 70: Events und Streams. Ein Virtueller Verstärker Stream (fast immer Daten) Event (fast nie Daten) Stream (fast immer Daten)

Measuring with Super-DAQTM (PCI or USB)

N-Channel Ultrafast AD4096 bit, 1024 GHz

M-Channel Ultrafast DA4096 bit, 1024 GHz

n-Channel Ultraslow Human Input m-Channel Ultraslow Human Output

TerraMemory

Page 71: Events und Streams. Ein Virtueller Verstärker Stream (fast immer Daten) Event (fast nie Daten) Stream (fast immer Daten)

Schichtmodell SuperDAQ

HW.DLL

BF1.DLL BF2.DLL BF3.DLL BF4.DLL BF5.DLL

ADA

Funktionalitäts-Layer

Hardware-Layer

Hardware(1 Layer)

Verarbeitungs-Layer

UI-Layer JAVA - TCL/TK – TCP/IP - HTTP

JAVA C Fortran

Page 72: Events und Streams. Ein Virtueller Verstärker Stream (fast immer Daten) Event (fast nie Daten) Stream (fast immer Daten)

Virtueller SuperDAQ

DSP Code

ADA ADAADA

DSP Code DSP Code

HW.DLL

BF1.DLL

HW.DLL HW.DLL

BF2.DLL BF3.DLL BF4.DLL BF5.DLL

Virtual SuperDAQ

JAVA - TCL/TK – TCP/IP - HTTP

JAVA C Fortran

Funktionalitäts-Layer

Hardware-Layer

Hardware(2 Layers)

Verarbeitungs-Layer

UI-Layer