that was one hell of a FIXME

- fixed so that netty pipeline when generating addresses does not need
  to know the system name of the connecting client (which might differ
  from the local one, of course)
- this entailed differentiating between transport addresses and system
  addresses, which I took as an opportunity to separate everything out
  properly so that address schemas can easily be made pluggable
- made RemoteSupport generic in the address format it supports
- adapt netty stuff, and made everything else work with the most
  generic: ParsedTransportAddress
- did I mention that I statically separated unparsed from parsed
  addresses?
This commit is contained in:
Roland 2011-12-11 20:00:26 +01:00
parent 40654227b7
commit 7f0275bca2
18 changed files with 357 additions and 231 deletions

View file

@ -19,10 +19,10 @@ object NetworkEventStream {
private sealed trait NetworkEventStreamEvent
private case class Register(listener: Listener, connectionAddress: RemoteAddress)
private case class Register(listener: Listener, connectionAddress: ParsedTransportAddress)
extends NetworkEventStreamEvent
private case class Unregister(listener: Listener, connectionAddress: RemoteAddress)
private case class Unregister(listener: Listener, connectionAddress: ParsedTransportAddress)
extends NetworkEventStreamEvent
/**
@ -37,8 +37,8 @@ object NetworkEventStream {
*/
private class Channel extends Actor {
val listeners = new mutable.HashMap[RemoteAddress, mutable.Set[Listener]]() {
override def default(k: RemoteAddress) = mutable.Set.empty[Listener]
val listeners = new mutable.HashMap[ParsedTransportAddress, mutable.Set[Listener]]() {
override def default(k: ParsedTransportAddress) = mutable.Set.empty[Listener]
}
def receive = {
@ -70,12 +70,12 @@ class NetworkEventStream(system: ActorSystemImpl) {
/**
* Registers a network event stream listener (asyncronously).
*/
def register(listener: Listener, connectionAddress: RemoteAddress) =
def register(listener: Listener, connectionAddress: ParsedTransportAddress) =
sender ! Register(listener, connectionAddress)
/**
* Unregisters a network event stream listener (asyncronously) .
*/
def unregister(listener: Listener, connectionAddress: RemoteAddress) =
def unregister(listener: Listener, connectionAddress: ParsedTransportAddress) =
sender ! Unregister(listener, connectionAddress)
}