> On Dec 19, 2015, at 5:01 AM, Chris Norman <chris.norm...@googlemail.com> 
> wrote:
> 
> Hello,
> 
> On 17/12/2015 13:03, Glyph Lefkowitz wrote:
>> 
>>> On Dec 17, 2015, at 4:56 AM, Chris Norman < 
>>> <mailto:chris.norm...@googlemail.com>chris.norm...@googlemail.com 
>>> <mailto:chris.norm...@googlemail.com>> wrote:
>>> 
>>> Hi,
>>> It's a MUD server, so players type in commands and receive textual 
>>> responses.
>>> 
>>> One of the admin commands is the ability to shutdown the server (or CTRL-C 
>>> might be pressed on the console). I'd like this action to notify all 
>>> connected transports that the server is going down for shutdown, so they're 
>>> not rudely disconnected, then once the notifications have all gone through, 
>>> then the server is free to shutdown.
>> 
>> Gotcha.  So you don't need to necessarily wait for all the messages to be 
>> delivered if there are slow clients waiting around; you just want to send 
>> everyone a farewell message and if they haven't responded within a 
>> reasonable timeout, go ahead and shut down anyway.
>> 
>> If your MUD server is already a Service < 
>> <https://twistedmatrix.com/documents/15.5.0/api/twisted.application.service.IService.html>https://twistedmatrix.com/documents/15.5.0/api/twisted.application.service.IService.html
>>  
>> <https://twistedmatrix.com/documents/15.5.0/api/twisted.application.service.IService.html>>
>>  being launched by twistd, you just need to add a stopService 
>> <https://twistedmatrix.com/documents/15.5.0/api/twisted.application.service.IService.html#stopService
>>  
>> <https://twistedmatrix.com/documents/15.5.0/api/twisted.application.service.IService.html#stopService>>
>>  method that returns a Deferred.  When CTRL-C is hit (or anything else 
>> causes reactor.stop to be called), it will call this stopService method, and 
>> won't exit until a Deferred fires.
>> 
>> In your case, a simple deferLater < 
>> <https://twistedmatrix.com/documents/15.5.0/api/twisted.internet.task.html#deferLater>https://twistedmatrix.com/documents/15.5.0/api/twisted.internet.task.html#deferLater
>>  
>> <https://twistedmatrix.com/documents/15.5.0/api/twisted.internet.task.html#deferLater>>
>>  will probably do the trick.  You can also speed things up when there are no 
>> connected clients left by cancelling that Deferred to make it finish firing 
>> immediately.
>> 
>> Will that work for you?
>> 
>>> I hope all this makes sense.
> 
> It's not a service no... Should it be? I wasn't planning to use twistd, 
> mainly because I don't know how to, and running
> python main.py
> is working fine, accepting command line arguments - the works.
> 
> It could be converted though, if there is an advantage with services?

Services are just the standard way to organize starting up and shutting down 
with Twisted.  And running under `twistd´ takes care of some of the details of 
starting up and hosting your service, including initializing logging, managing 
the timing of setting the UID and GID, selecting the reactor and so on.  But if 
you're happy with your own service setup, it's not necessary.  The alternative 
is to use `addSystemEventTrigger´: 
https://twistedmatrix.com/documents/15.5.0/api/twisted.internet.base.ReactorBase.html#addSystemEventTrigger
 
<https://twistedmatrix.com/documents/15.5.0/api/twisted.internet.base.ReactorBase.html#addSystemEventTrigger>
> Also, I've read quite a lot about Deferreds. I thought initially they were 
> for multithreading your application, but I realise that's wrong, so I don't 
> understand what the point in them is?

You can't block (i.e. wait to return from your function until you have a 
result) in an async system, so Deferreds are a placeholder for a result that 
doesn't exist yet.  krondo.com's Twisted introduction covers this in some 
detail, if the official Twisted docs didn't help you: 
http://krondo.com/?page_id=1327

> This isn't to say there isn't one mind you, I think I'm just majorly missing 
> the point.

If there weren't a point to having Deferreds then Twisted would be a very 
strange system indeed ;).

-glyph

_______________________________________________
Twisted-Python mailing list
Twisted-Python@twistedmatrix.com
http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python

Reply via email to