KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > ozoneDB > DxLib > net > DxMultiServer


1 // You can redistribute this software and/or modify it under the terms of
2
// the Ozone Library License version 1 published by ozone-db.org.
3
//
4
// The original code and portions created by SMB are
5
// Copyright (C) 1997-@year@ by SMB GmbH. All rights reserved.
6
//
7
// $Id: DxMultiServer.java,v 1.9 2000/10/28 16:55:15 daniela Exp $
8

9 package org.ozoneDB.DxLib.net;
10
11 import java.io.*;
12 import java.net.*;
13 import org.ozoneDB.DxLib.*;
14
15 /**
16  * DxMultiServer verwaltet mehrere DxClients - Verbindungen. Durch einen Thread
17  * wird staendig auf neue Verbindungen gewartet, durch einen weiteren auf
18  * einkommende Daten. Wird etwas empfangen, wird die Methode handleClientEvent()
19  * aufgerufen.
20  *
21  *
22  * @author <a HREF="http://www.softwarebuero.de/">SMB</a>
23  * @version $Revision: 1.9 $Date: 2000/10/28 16:55:15 $
24  */

25 public abstract class DxMultiServer extends DxListBag {
26     
27     protected ServerSocket serverSocket;
28     
29     protected Acceptor acceptor;
30     
31     protected Thread JavaDoc acceptThread;
32     
33     protected ThreadGroup JavaDoc threadGroup;
34     
35     
36     public DxMultiServer( int port ) throws IOException{
37         serverSocket = new ServerSocket( port );
38         acceptor = new Acceptor( this );
39         threadGroup = new ThreadGroup JavaDoc( getClass().getName() );
40         acceptThread = newThread( acceptor );
41     }
42     
43     
44     /**
45      * liefert die ThreadGroup des MultiServers.
46      */

47     public ThreadGroup JavaDoc threadGroup() {
48         return threadGroup;
49     }
50     
51     
52     /**
53      * Diese Methode liefert einen neuen Thread und wird fuer die AcceptThread
54      * und den DxMultiServerClient benoetigt. Sie kann ueberschrieben werden, um evtl.
55      * eigene Threads zu erzeugen (z.B. bei Verwendung eines eigenen Schedulers).
56      * Ausserdem wird der mit diesem Thread verbundene Client uebergeben (kann
57      * auch null sein !!).
58      */

59     public Thread JavaDoc newThread( Runnable JavaDoc run ) {
60         return new Thread JavaDoc( threadGroup(), run );
61     }
62     
63     
64     /**
65      * erzeugt einen neuen client aus einer socket-verbindung;
66      * diese methode kann ueberschrieben werden, um evtl. eigene clients
67      * einfuegen zu koennen
68      */

69     public synchronized DxMultiServerClient newClient( Socket sock ) {
70         try {
71             return new DxMultiServerClient( sock, this );
72         } catch (Exception JavaDoc e) {
73             return null;
74         }
75     }
76     
77     
78     /** accept thread starten */
79     public void accept() {
80         if (!acceptThread.isAlive()) {
81             acceptThread.start();
82         }
83     }
84     
85     
86     public void close() throws IOException {
87         acceptThread.stop();
88         DxIterator it = iterator();
89         while (it.next() != null) {
90             ((DxMultiServerClient)it.object()).close();
91         }
92         serverSocket.close();
93     }
94     
95     
96     public synchronized void removeClient( DxMultiServerClient client ) {
97         DxIterator it = iterator();
98         DxMultiServerClient cl;
99         while ((cl = (DxMultiServerClient)it.next()) != null) {
100             if (cl == client) {
101                 it.removeObject();
102                 cl.close();
103                 return;
104             }
105         }
106         throw new RuntimeException JavaDoc( "removeClient(): no such client." );
107     }
108     
109     
110     /**
111      * diese methode wird aufgerufen, wenn an der verbindung client daten
112      * anliegen; muss ueberschrieben werden, um das applications spezifische
113      * verhalten zu bestimmen
114      */

115     public abstract void handleClientEvent( DxMultiServerClient client, Object JavaDoc event );
116     
117     
118     public abstract void handleClientException( DxMultiServerClient client, Exception JavaDoc e );
119 }
120
Popular Tags