this enables
class F[T <: ChannelList : TypeTag](t: ChannelRef[T]) extends Channels[T] {
channel[T] { (x, snd) => x -?-> t -!-> snd }
}
which can then be extended to bunching, filtering, transforming of
message streams.
- you can tell/ask WrappedMessage and it will be checked precisely and
sent naked
- ask() always returns Future[WrappedMessage[_ <: ChannelList, LUB]]
- FutureOps.lub will collapse such a Future into Future[LUB]
- sending a Future[WrappedMessage[_, _]] to a ChannelRef will check it
precisely and send naked
- reify() all trees, no bricolage
- use rediscovered c.TypeTag factory to splice in calculated types
- give meaningful names to type parameters and humunguosly explode val
names
- add Helpers.weakTT for producing a WeakTypeTag from a tpe
- use that to simplify Ask.scala (the others will follow)
- and this way make forwarding actually work
- rename projects to akka-channels and akka-channels-tests
- move implementation into akka.channels.macros package
- remove picking up ActorRef as sender (or none at all)
- factor out logic to make different façades acting upon Future[] or Any
so that -!-> and -?-> can complement the traditional <-!- and <-?-
- the new operators are easily distinguishable from !/? and the
rightwards-pointing go with the flow and compose better, let’s try
them out
- basic principle is that if we get a reply of type T1 and our channels
allow us to reply to such a message with type T2, then the target
needs to support that as well, and so on.
- due to this, forwarding will have to be restricted; but it might well
be that forwarding will not be completely safe in any case
- channel[T <: ChannelList] takes a WrappedMessage[T] => Unit function
because there cannot be a typed sender reference (which type would it
have?)
- ChannelRef[T] allows forwarding of WrappedMessage[T] (and nothing
else; keeping the sender is essential)
- move ActorRef.narrow implicit into the package object
- do not accept top-level Channels which send to their parent
- remove Parent trait and use ChannelList to describe the parent
- remove ugly hack and switch to erasure-based dispatch to the channels
- add parentChannel
- make ChannelRef a value class
- Promise was completed twice erroneously
- Purged the trait Status from Transport, using failed futures instead
- using intercept instead of try ... catch in tests
- added termination hook for UntrustedSpec to shut down second system
- Fixed threading issues in ThrottlerTransportAdapter
- Removed nulls from exception constructors
- replaced Promise.successful(...).future with Future.successful