next up previous contents index
Next: Einstellungssache: Configuration.pm Up: Design und Klassenbibliothek Previous: Globales Eventhandling: Network.pm


Verbindungsaufnahme: Connection.pm

Die Connection- Klasse bildet die Basisklasse für die Kommunikation des POS- Systems - derzeit ausschließlich via TCP - mit anderen Servern, telnet- Sessions oder Html- Browsern.

Die eine Besonderheit dieser Klasse besteht darin, daß Connection zwei Basisklassen hat. Um die Socket- Funktionalität zu erhalten, wird IO::Socket::Inet eingebunden. Die zweite Quelle ist die Eigenimplementierung LogClient, um die Methoden zur Serialisierung und des Logging verwenden zu können.

Die Zweite Besonderheit ergibt die sich aus der Kombination des zeilenorientierten Lesens von einem Socket in Kombination mit der Verwendung des select() - Systemaufrufes. Der Rückgabewert eines can_read() sind alle Sockets, von denen gelesen werden kann. Werden die ankommenden Zeilen mithilfe der stdio- Bibliothek gelesen, verschwinden alle Zeilen im Filepuffer, und das can_read blockiert - obwohl unter Umständen noch Zeilen im Puffer zwischengelagert sind. Als Lösung hat jedes Connection- Objekt einen eigenen Puffer, in dem ankommende Zeilen wieder zusammengesetzt und gespeichert werden.