Message passing pattern matching

Casper Færgemand" <shorttail at hotmail.com> Casper Færgemand" <shorttail at hotmail.com>
Wed Jan 29 13:48:07 PST 2014


Hey, I'm handling concurrency with message passing, previously 
with D's concurrency, now with Vibe-d, which I assume works the 
same way.

My app is a chat server, and when a connection is opened to a 
client, I store the Tid of the thread (or fibre?) handling 
sending messages out to the client. This lets me broadcast 
messages to all Tids. When a connection is closed, the thread 
requests that its Tid is removed from the list.

Both adding and removing the Tid technically require only the Tid 
to be message passed. However, I would like to distinguish 
between the two cases. I currently have two empty structs named 
AddTid and RemoveTid, and I pass those along. I assume some bytes 
must be passed in their place to tell of their type, but that's 
fine.

It does feel rather hacked, however. I'm aware that D doesn't 
support excessively fancy pattern matching, like what is found in 
SML, but is there a more correct way to do this? Enums don't 
work, because they have the same type. I can pattern match the 
enums later, but I want to do it immediately.


More information about the Digitalmars-d-learn mailing list