Mercurial > projects > ldc
diff tango/tango/net/cluster/tina/CacheServer.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 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tango/tango/net/cluster/tina/CacheServer.d Fri Jan 11 17:57:40 2008 +0100 @@ -0,0 +1,94 @@ +/******************************************************************************* + + copyright: Copyright (c) 2004 Kris Bell. All rights reserved + + license: BSD style: $(LICENSE) + + version: July 2004: Initial release + + author: Kris + +*******************************************************************************/ + +module tango.net.cluster.tina.CacheServer; + +private import tango.net.cluster.tina.RollCall, + tango.net.cluster.tina.CacheThread, + tango.net.cluster.tina.ClusterCache, + tango.net.cluster.tina.ClusterServer; + +/****************************************************************************** + + Extends the ClusterServer to glue cluster-cache support together + +******************************************************************************/ + +class CacheServer : ClusterServer +{ + private ClusterCache cache; + + /********************************************************************** + + Construct this server with the requisite attributes. The + 'bind' address is the local address we'll be listening on + + **********************************************************************/ + + this (InternetAddress bind, Logger logger, uint size) + { + super ("cache", bind, logger); + + // create a cache instance + cache = new ClusterCache (cluster, size); + } + + /********************************************************************** + + Start the server + + **********************************************************************/ + + void start (bool reuse=false) + { + super.start (new RollCall(RollCall.Cache), reuse); + } + + /********************************************************************** + + Factory method for servicing a request. We just create + a new CacheThread to handle requests from the client. + The thread does not exit until the socket connection is + broken by the client, or some other exception occurs. + + **********************************************************************/ + + override void service (IConduit conduit) + { + (new CacheThread (this, conduit, cluster, cache)).execute; + } +} + + + +version (CacheServer) +{ + import tango.io.Console; + + import tango.net.cluster.tina.CmdParser; + + void main (char[][] args) + { + auto arg = new CmdParser ("cache.server"); + + // default number of cache entries (per channel) + arg.size = 1024; + + if (args.length > 1) + arg.parse (args[1..$]); + + if (arg.help) + Cout ("usage: cacheserver -port=number -size=cachesize -log[=trace, info, warn, error, fatal, none]").newline; + else + (new CacheServer(new InternetAddress(arg.port), arg.log, arg.size)).start; + } +}