comparison tango/tango/net/cluster/tina/util/ServerThread.d @ 132:1700239cab2e trunk

[svn r136] MAJOR UNSTABLE UPDATE!!! Initial commit after moving to Tango instead of Phobos. Lots of bugfixes... This build is not suitable for most things.
author lindquist
date Fri, 11 Jan 2008 17:57:40 +0100
parents
children
comparison
equal deleted inserted replaced
131:5825d48b27d1 132:1700239cab2e
1 /*******************************************************************************
2
3 copyright: Copyright (c) 2004 Kris Bell. All rights reserved
4
5 license: BSD style: $(LICENSE)
6
7 version: Initial release: April 2004
8
9 author: Kris
10
11 *******************************************************************************/
12
13 module tango.net.cluster.tina.util.ServerThread;
14
15 private import tango.core.Thread,
16 tango.core.Runtime,
17 tango.core.Exception;
18
19 private import tango.net.ServerSocket;
20
21 private import tango.net.cluster.tina.util.AbstractServer;
22
23 /******************************************************************************
24
25 Subclasses Thread to provide the basic server-thread loop. This
26 functionality could also be implemented as a delegate, however,
27 we also wish to subclass in order to add thread-local data (see
28 HttpThread).
29
30 ******************************************************************************/
31
32 class ServerThread
33 {
34 private AbstractServer server;
35 private ServerSocket socket;
36
37 /**********************************************************************
38
39 Construct a ServerThread for the given Server, upon the
40 specified socket
41
42 **********************************************************************/
43
44 this (AbstractServer server, ServerSocket socket)
45 {
46 this.server = server;
47 this.socket = socket;
48 (new Thread (&run)).start;
49 }
50
51 /**********************************************************************
52
53 Execute this thread until the Server says to halt. Each
54 thread waits in the socket.accept() state, waiting for
55 a connection request to arrive. Upon selection, a thread
56 dispatches the request via the request service-handler
57 and, upon completion, enters the socket.accept() state
58 once more.
59
60 **********************************************************************/
61
62 private void run ()
63 {
64 while (Runtime.isHalting is false)
65 try {
66 // wait for a socket connection
67 auto sc = socket.accept;
68
69 // did we get a valid response?
70 if (sc)
71 // yep - process this request
72 server.service (sc);
73 else
74 // server may be halting ...
75 if (socket.isAlive)
76 server.getLogger.error ("Socket.accept failed");
77
78 } catch (IOException x)
79 server.getLogger.error ("IOException: "~x.toString);
80
81 catch (Object x)
82 server.getLogger.fatal ("Exception: "~x.toString);
83 }
84 }