These are chat archives for akkadotnet/akka.net

10th
Feb 2016
Hyungho Ko
@hhko
Feb 10 2016 09:22
if OS suddenly shut down, how to recover actors who have to persist.
Actorsystem has the SupervisorStrategy.
if actor suddenly shut down, parent can recover it.
how to recover actors when out of Actorsystem?
Marc Piechura
@marcpiechura
Feb 10 2016 09:29
@hhko you can't create an actor outside of an ActorSystem
Hyungho Ko
@hhko
Feb 10 2016 09:30
When an event such as OS shutdown occurs out of ActorSystem.
I know...
Arjen Smits
@Danthar
Feb 10 2016 09:31
OS shutdown is almost the equivalent of somebody pulling the power cord on your machine. Not a whole lot you can do.
If your running in windows service, or console app. You can use the application exit events or the service stop events to do something .
Hyungho Ko
@hhko
Feb 10 2016 09:32
i want to recover actors with other API of OS.
if possible?
Marc Piechura
@marcpiechura
Feb 10 2016 09:32
So you mean you have created actors which persist some state and you want to recreate them after a reboot for example?
Hyungho Ko
@hhko
Feb 10 2016 09:33
yes... right^^;
Could you recommend good ways?
my program is UI by WinForm.
@Danthar Can you describe the application exit events?
Arjen Smits
@Danthar
Feb 10 2016 09:36
Well im still trying to figure out what your exact problem is.. Because if your using persistent actors. They recover their state once you start them back up again.
Marc Piechura
@marcpiechura
Feb 10 2016 09:37
so I assume you have actor a that creates child's which persist state, I would simply let a also persist an event "actor child1 created" and when you recreate actor a after the restart it replays the events and you can recreate the child's
Arjen Smits
@Danthar
Feb 10 2016 09:37
But if you want to signal your actors system that the environment is shutting down, and you want to do last minute cleanup stuff to mimimize loss of work/messages.
There are events you can subscribe to. Which events they are, and how you do that. Differs per application type. But you can easily find them on MSDN
But even then. there are no guarentees
thats why i said that OS shutdown is almost the equivalent of someone pulling the plug.
Because if the OS attempts to shutdown your process. And your process takes to long to stop. The OS simply kills it.
Hyungho Ko
@hhko
Feb 10 2016 09:46
@Danthar @Silv3rcircl3 thank you for your considerate^^;
reply
Bartosz Sypytkowski
@Horusiath
Feb 10 2016 10:38
@hhko you could utilize Akka.Cluster.Sharding - it can recreate shard of persistent actors from the shutdown actor system on another node
y-vasilyev
@y-vasilyev
Feb 10 2016 14:09
Hi, folks!
How-to setup mailbox from config?
akka {
my-custom-mailbox {
mailbox-type = "DoubleGIS.YouLa.ActorsService.Actors.MobileValues.MobileValuesCoordinatorMailbox, DoubleGIS.YouLa.ActorsService"
}
var mobileValuesCoordinator = system.ActorOf(system.DI().Props<MobileValuesCoordinatorActor>().WithMailbox("my-custom-mailbox"), "mobileValues"); throws exception (
can't find out what's wrong
John Nicholas
@MrTortoise
Feb 10 2016 14:18
i dont really know but from looking at this it looks liek your config isnt right? http://getakka.net/docs/working-with-actors/Mailbox
was only really looking as was trying to figure out why you want a custom mailbox ;)
y-vasilyev
@y-vasilyev
Feb 10 2016 14:19
tag "my-custom-mailbox " should be inside "akka" tag?
John Nicholas
@MrTortoise
Feb 10 2016 14:20
it was the akka.actor.deployment bit
im looking at this
akka.actor.deployment { /my-actor-path { mailbox = my-custom-mailbox } }
gah i never get code formatting to work
but otherwise you are right from that page its not clear where the my-custom-mailbox bit should sit in the HOCON ... you might be able to find some tests in the source that use one?
y-vasilyev
@y-vasilyev
Feb 10 2016 14:24
doesnt work (
'''
Additional information: Configuration problem while creating akka://YouLaCluster/user/mobileValues with dispatcher [akka.actor.default-dispatcher] and mailbox []
Bartosz Sypytkowski
@Horusiath
Feb 10 2016 14:24
@y-vasilyev I'm not sure if you're expected to put the whole HOCON path to your custom mailbox configuration section
y-vasilyev
@y-vasilyev
Feb 10 2016 14:28
var mobileValuesCoordinator = system.ActorOf(system.DI().Props<MobileValuesCoordinatorActor>().WithMailbox("my-custom-mailbox"), "mobileValues");
var mobileValuesCoordinator = system.ActorOf(system.DI().Props<MobileValuesCoordinatorActor>().WithMailbox("/akka/my-custom-mailbox"), "mobileValues");
var mobileValuesCoordinator = system.ActorOf(system.DI().Props<MobileValuesCoordinatorActor>().WithMailbox("akka/my-custom-mailbox"), "mobileValues");
Bartosz Sypytkowski
@Horusiath
Feb 10 2016 14:28
@y-vasilyev paths are dot-separated
so if you have section like akka { my-custom-mailbox{...} } it's path is akka.my-custom-mailbox
y-vasilyev
@y-vasilyev
Feb 10 2016 14:30
just tried, doesnt work (
Bartosz Sypytkowski
@Horusiath
Feb 10 2016 14:31
wait a sec, I'll take a look
y-vasilyev
@y-vasilyev
Feb 10 2016 14:35
just looked into sources of akka, maybe var mailboxConfig = system.Settings.Config.GetConfig("akka.actor.mailbox"); will try in moment
Bartosz Sypytkowski
@Horusiath
Feb 10 2016 14:35

yep, it should be just like I said for config like this:

akka {
   my-custom-mailbox {
    mailbox-type = "type, assembly"
  }
}

props should be: props.WithMailbox("akka.my-custom-mailbox")

y-vasilyev
@y-vasilyev
Feb 10 2016 14:37
ok, I'll try
yes ) it works perfectly =) Thanks a lot! =)
Bartosz Sypytkowski
@Horusiath
Feb 10 2016 14:39
np :)
voltcode
@voltcode
Feb 10 2016 15:43
@Horusiath is there an easy way to find out from what was the last commit to original akka file ported to .net version?
For example I have cluster.cs and what to know what was the last commit to cluster.Scala that made it to akkanet repo
The reason is to see if a bug fixed in Scala version is also fixed in .net
Ivan R. Perez
@irperez
Feb 10 2016 15:53
Hello everyone. I've been looking at the Akka.Cluster.Sharding module. Excellent work! I'm curious if anyone has a sample application that shows off how to use it beyond the documentation.
Graham Ambrose
@gambrose
Feb 10 2016 16:26
Are there any examples of defining a custom mailbox using just code, i.e. no HOCON. I am trying to register a custom priority mailbox.
Bartosz Sypytkowski
@Horusiath
Feb 10 2016 17:04
@voltcode probably there is none comparison dictionary between those two :/
@irperez probably the best place to look for will be JVM side of the force. This plugin is still quite fresh on the .NET side
Ivan R. Perez
@irperez
Feb 10 2016 17:16
@Horusiath thanks for the feedback. Assuming we are building some kind of user session with the sharding module, how would you suggest the shard ID be implemented? I am just looking for some guidance on the shard ID. Right now in the documentation it's very vague on how this should be constructed. Some scenario examples would help here.
alexgoeman
@alexgoeman
Feb 10 2016 17:33
@Horusiath : Sorry for late reply. Hereby some context information
Actor state is mainly: PreviousValues and CurrentValues
Actor gets message notifying that something has changed.
This will trigger the actor to
retrieve the latest values
and store the values in the Actor CurrentValues state
When we already have something in CurrentValues we first push the current values in the "previous" values member
Reason for the two states is to be able to create a report message containing previous , current and delta values
So I currently defined only one event (identifying state change) = StateChangeEvent and contains the two state members (Can be refined by creating two events , and event content is not incremental but is more or less also a snapshot )
When receiving notification I have few code paths that differ based on the returned latest values.
1)It is possible that when retrieving the latest values that its modification date is not changed then I just update CurrentValues with the latest and if
2)I also check if PreviousValues is data related to yesterday then I set PreviousValues to null (do not want to compare with values from yesterday)
So in code there are three different event changes (maximum 2 per message are executed ).
After al that is done (state has been changed) some message is sent to another actor with the report message based on the state.
So there are some sequential dependent steps , meaning that in the meantime I do not want any other messages processed, because this will impact my state and also the content of the messages sent.
PS: Querying for my latest values is async
Bartosz Sypytkowski
@Horusiath
Feb 10 2016 17:36
@irperez Two general strategies are:
  • looking for natural boundaries in your domain, like geographical regions, offices, company units etc. This is quite good and fast (as all entities located in one logical unit will probably often communicate with each other, and they are guaranteed to be localed on the same shard ⇒ same machine). Bad part is that they may be uneven in size. For this you may decide to continue splitting shard ids for big regions into smaller ones.
  • creating hashing algorithm and distribute hash ranges among the shards. This is quite easy. Cons is that this may result in a little slower random message pass, as two entities that often communicate, may be located in different shards
alexgoeman
@alexgoeman
Feb 10 2016 17:38
@Horusiath :

Attempt to some pseudo code

var latestValues = await GetLatestValuesAsync();

if (condition Normal Flow)
Persist( new StateChangeEvent(new Values),
Event=> {
set new state
}
)
else if (condition no really an update)
Persist( new StateChangeEvent(new Values),
Event=> {
set new state
}
)

if (condition previous values are from yesterday)
{
Persist(new StrateChangeEvent(new Values),
Event=>{
set new state
}
);
}

OtherActor.Tell(GenerateReportMessage())
...

Bartosz Sypytkowski
@Horusiath
Feb 10 2016 17:45
@alexgoeman 1) aren't CurrentValues only a single value in fact? 2) What is that GetLatestsValuesAsync?
alexgoeman
@alexgoeman
Feb 10 2016 17:51
@Horusiath : CurrentValues is just poco class containing multiple values (+some dates ) 2) GetLatestValuesAsync() was my attempt to pseudo code the fact of async loading the values from a database
@Horusiath : PreviousValues is of the same class as CurrentValues member
Bartosz Sypytkowski
@Horusiath
Feb 10 2016 18:03
@alexgoeman this sounds really, like you have messages of (value, date), and when persisting them, simply omitting the actor's state change if message.date is older than today
alexgoeman
@alexgoeman
Feb 10 2016 18:09
@Horusiath : not sure I completely understand you, but cannot really omit any state changes. When I set PreviousValues to null , this is not omitting or cannot be omitted as a state change, because it will impact the report message. If recovery at that moment that means that actor will not have persisted the null value and if some query message arrives for its state it will report previous and current values
Bartosz Sypytkowski
@Horusiath
Feb 10 2016 18:13
yes, but you've said that you don't want to make comparison with values from yesterday, so only values from particular date are in scope of your interest. I've found some problems with reading of your pseudo-code as it's full of if-else statements (which often indicates, that you could use state machine for that) and all Persist calls in each one of them look exactly the same
alexgoeman
@alexgoeman
Feb 10 2016 18:15
Persist calls look the same because of the pseudo code ( depending on the if branch values are shifted, only currentValues is updated or Previousvalues is set to null).
When settign values to null, there is still a message sent (only containing the current values, no previous and delta)
I find your referral to statemachine interesting in the fact that that is why I want to use async, because that is really a state machine without blocking a thread. Implementing this myself in the actor would I think make reading the logic very difficult
Bartosz Sypytkowski
@Horusiath
Feb 10 2016 18:22
ok, I've refactored your code sample a little:
void Receive(LatestValues message) 
{
    if (condition Normal Flow)
        Persist(new StateChangeEvent(new Values()), @event=> {
            //set new state - ??
        });
    else if (condition no really an update)
        Persist(new StateChangeEvent(new Values()), @event => {
            // set new state - ??
        });

    if (condition previous values are from yesterday) {
        Persist(new StrateChangeEvent(new Values()), @event=>{
            // set new state - clear the current and previous vals
        });
    }

    OtherActor.Tell(GenerateReportMessage())
}
is it ok?
and referring to async/await - it is realized internally as state machine, but from the perspective of programmer it is still represented as if-branched spaghetti code. State machines have been introduced for exactly oposite reason, to keep state and transitions modularized, readable and easy to represent
Bartosz Sypytkowski
@Horusiath
Feb 10 2016 18:35
@alexgoeman does refactoring your pseud code into something like this have logical sense?:
void Receive(LatestValues message) 
{
    if (condition Normal Flow)
        Persist(new StateChangeEvent(new Values()), UpdateState);
    else if (condition no really an update)
        Persist(new StateChangeEvent(new Values()), UpdateState);

    OtherActor.Tell(GenerateReportMessage())
}

void UpdateState(StateChangeEvent @event) 
{
    if (condition previous values are from yesterday) {
      // set new state - clear the current and previous vals
    } else {
      // set new state - ??
    }
}
alexgoeman
@alexgoeman
Feb 10 2016 18:56
No because the generated message will be sent based on old state. State only actually after persist has actually saved
Sorry cannot edit text on tablet. State only actually set after...
Bartosz Sypytkowski
@Horusiath
Feb 10 2016 18:59
void Receive(LatestValues message) 
{
    if (condition Normal Flow)
        Persist(new StateChangeEvent(new Values()), UpdateState);
    else if (condition no really an update)
        Persist(new StateChangeEvent(new Values()), UpdateState);
}

void UpdateState(StateChangeEvent @event) 
{
    if (condition previous values are from yesterday) {
      // set new state - clear the current and previous vals
    } else {
      // set new state - ??
    }
    OtherActor.Tell(GenerateReportMessage())
}
how about now?
alexgoeman
@alexgoeman
Feb 10 2016 19:02
Not yet because same issue when prev is from yesterday, async. I understand what you are doing, but does this not obfuscate the overall readability of logic?
And in meantime other msg can get processed
Bartosz Sypytkowski
@Horusiath
Feb 10 2016 19:03
no, it cannot
actor doesn't process any new messages before UpdateState will finish
alexgoeman
@alexgoeman
Feb 10 2016 19:06
Indeed, but when needing other async method like loading data and using pipe, then it is possible?
Bartosz Sypytkowski
@Horusiath
Feb 10 2016 19:09
yes, with PipeTo you'll execute asynchronous part and still be able to send result back to actor - it will be picked from mailbox when actor will finish executing event handler. Only tricky part is that Sender is mutable property, so it cannot be used directly inside UpdateState, it must be passed i.e. as method parameter
alexgoeman
@alexgoeman
Feb 10 2016 19:16
I meant that by using a normal async method it would become possible that another notification message can get started, another message would start a second logical flow
Something I do not want
Bartosz Sypytkowski
@Horusiath
Feb 10 2016 19:17
and that you would get race conditions in your actor's state
alexgoeman
@alexgoeman
Feb 10 2016 19:18
So only persist has a way to do something async and continue with some code without other messages getting processed. This seems not fair ☺
Bartosz Sypytkowski
@Horusiath
Feb 10 2016 19:19
by default all of the actor's API methods are build to maintain one message at the time rule
alexgoeman
@alexgoeman
Feb 10 2016 19:20
Yes but by using pipeto, this gets broken
In a logical sense
Bartosz Sypytkowski
@Horusiath
Feb 10 2016 19:21
@alexgoeman ReceiveActor with async lambda won't try to process multiple messages at the same time. Btw. persistent actors are build using basic actor primitives - so basically they can never be better than your actors
alexgoeman
@alexgoeman
Feb 10 2016 19:22
Actor indeed processes only one message at a time, but I do not want to process messages between loading data and the pipeto message arriving
Bartosz Sypytkowski
@Horusiath
Feb 10 2016 19:22
the only thing, PipeTo does, is that it pushes result of async method on top of target actor's mailbox. As long as you won't try to mutate actor's state from withing async method, everything is safe

but I do not want to process messages between loading data and the pipeto message arriving

This is place when state machines are great

alexgoeman
@alexgoeman
Feb 10 2016 19:25
My statement in fact is that with receive actor I can use async methods but when switching to receivepersistentactor this is not possible anymore because of the way the persist method is implemented
In fact I tried to use the receive actor's method todo async, but this does not work because it suspends inbox but the persist method depends on a next message so deadlock
Bartosz Sypytkowski
@Horusiath
Feb 10 2016 19:29
Hopefully code sample will clarify my intent:
// default actor behavior - to be invoked inside constructor
void NormalProcessing() {
  Command<SomeCommand>(message => {
    // do something in actor logic
    DoSomethingAsync().PipeTo(Self);
    Become(WaitingToFinish);
    // ...
  });
}

// wait for DoSomethingAsync result, stashing all other messages
bool WaitingToFinish(object message) {
    Command<SomethingAsyncFinished>(message => {
        // PipeTo result arrived
        // do some logic
        Become(NormalProcessing);
        // unstash all messages, that came so far, back to the mailbox
        this.Stash.UnstashAll();
    });
    // stash all messages until PipeTo result arrives
    CommandAny(other => this.Stash.Stash(other))
}
alexgoeman
@alexgoeman
Feb 10 2016 19:30
Pipeto: will push on top, this happens when async method terminates, but will messages that arrive before that be processed? Like a second notification
Bartosz Sypytkowski
@Horusiath
Feb 10 2016 19:34
you can read more about stashing itself here cause I guess, this is something for your problem
alexgoeman
@alexgoeman
Feb 10 2016 19:41
I agree that you can rewrite this as a state machine, but don't you agree that this makes your code much more difficult to read , understand and maintain ? This is exactly what the async feature does for you, but you can keep writing code sequentially
And also you get the same performance
because in the unrolled state machine technique you are just stashing and messages are not getting processed
Bartosz Sypytkowski
@Horusiath
Feb 10 2016 19:42
you've forgot that async await itself doesn't have a notion of messages and mailboxes, the same issues apply there - also when it comes to performance, we measured that and there is a drop there
alexgoeman
@alexgoeman
Feb 10 2016 19:46
I have no measurements, so I believe you, but still find that very strange, any arguments that could explain that drop in performance ?
Another point that I like to make is that I feal uneasy (for lack of better word ) with the asymmetry between ReceiveActor allowing async methods and ReceivePersistentActor (or Persistence in general) not allowing this
So when I switch between something persistent, suddenly need to rewrite code, not just adding the persistence code
Bartosz Sypytkowski
@Horusiath
Feb 10 2016 19:51
you'd need to ask @rogeralsing , but in general using async/await in ReceiveActor halves it's throughtput and it's unrecommended. This can be made better, but that's something planned on v2.0.
this is usually more about switching the mindset to something new - personally, I didn't had that awaiting problem for months. It's all about the design
alexgoeman
@alexgoeman
Feb 10 2016 20:04
I agree fully that working with Actors is indeed switching some mindsets, but in the case of the async method support would it not be nice that this can be choice of programmer between the more clean (subjective of course) at expense of some performance and the most optimal (more difficult to read and maintain) solution (e.g. try unroling something like try catch over multiple async methods in a async method ). Want to thank you very much for all your feedback and answers
John Nicholas
@MrTortoise
Feb 10 2016 20:39
another thing about using asyc await is often you will mess with schedulers etc configuring the context you return on etc
one nice thing about the message patterns is that i have generally never had to even consider that stuff
Bartosz Sypytkowski
@Horusiath
Feb 10 2016 20:39
@alexgoeman general approach is that we try to keep a base line quite low-level and performant. Akka is highly modularized, and usually abstraction-over-performance choices are done by higher level plugins build on top of existing ones
John Nicholas
@MrTortoise
Feb 10 2016 20:39
that said i havent had to mess with claims identities wtc yet ;p
morioma
@morioma
Feb 10 2016 21:09
Hello, everyone. First time here. Let me cut to the chase, Any one knows the answer to this "Akka.net cluster broadcast only received by one node" question of mine? http://stackoverflow.com/questions/35325590/akka-net-cluster-broadcast-only-received-by-one-node
Aaron Stannard
@Aaronontheweb
Feb 10 2016 21:10
@matthewma might be related to a clustered router bug
that's what you're using to broadcast to the nodes, right?
morioma
@morioma
Feb 10 2016 21:11
Yes, I meant to broadcast to all nodes. But only one receives.
Aaron Stannard
@Aaronontheweb
Feb 10 2016 21:12
got it
I'll log a bug for it
I've been able to recreate that myself
Pool routers work just fine
but Group routers have an issue with their routee table
Amon-Ra Mackie
@nevaenuf
Feb 10 2016 21:15
All, I've got a question concerning correlated messages. We are using akka to build micro services that communicate using a service bus. Most tasks that are generated in our system are initially created by a user. I would like all subsequent messages related to the initial task to be correlated to the initial message generated by the user. And I want to do so in a way that's fairly transparent from the developer using my api. I created a new IActorRef that wraps tell, a new ActorContext to provide that IActorRef, and a new actor to provide the new context. I've managed to get correlation working this way, but I'm not sure if the approach is dangerous. Anyone want to weigh in? Anyone using completely different strategies?
Aaron Stannard
@Aaronontheweb
Feb 10 2016 21:17
@matthewma related: akkadotnet/akka.net#1189
looks like I had already created one
I created a new IActorRef that wraps tell, a new ActorContext to provide that IActorRef, and a new actor to provide the new context. I've managed to get correlation working this way, but I'm not sure if the approach is dangerous.
@nevaenuf I'm having some trouble visualizing that
mind putting some pseudo-code in chat?
Bartosz Sypytkowski
@Horusiath
Feb 10 2016 21:20
@nevaenuf the easiest way would be to create a dedicated actor message, that wraps user message and keeps correlationId
morioma
@morioma
Feb 10 2016 21:20
@Aaronontheweb Thank you for the prompt input on this. So, as for right now, can I achieve cluster broadcast useing Pool instead of Group?
Aaron Stannard
@Aaronontheweb
Feb 10 2016 21:21
yeah, that's my recommendation @matthewma
I also logged #1700 - another cluster bug I found recently
morioma
@morioma
Feb 10 2016 21:22
@Aaronontheweb Thank you. I will try out Pool.
Amon-Ra Mackie
@nevaenuf
Feb 10 2016 21:33

Sure. Doing something like below.

class CorrelatedActorRef : IUntypedActorRef {
CorrelatedActorRef(IActorRef actorRef){
_wrappedActorRef = actorRef;
}
...
Tell(object message, IActorRef sender){
if(CurrentCorrelation.CorrelationId exists and message is CorrelationMessage)
message.CorrelationId = CurrentCorrelation.CorrelationId

 _wrappedActorRef.Tell(message, sender)

}
...
}

class CorrelatedActorContext : Whatever this inherits
{

  CorrelatedActorContext (Func<ActorContext> currentActorContext){
               _currentActorContext = currentActorContext
 }
  IActorRef ActorOf<T>(...){
                 var ref = _currentActorContext.ActorOf<>(...)
                 CorrelatedActorRef correlated = new CorrelatedActorRef(ref)

               return correlated
  }

}

class CorrelatedReceiveActor : ReceiveActor {

         AroundReceive(message){
               if(message is CorrelatedMessage)
                     CurrentCorrelation.CorrelationId = message.CorrelationId
        }

       public static new Context {
                            return new CorrelatedContext(() => ActorBase.Context)
       } 

}

Well, that didn't post exactly as I had hoped, but I hope you get the general Idea. CurrentCorrelation is a static class and CorrelationId is ThreadStatic.
This way when the developer sends a CorrelatedMessage, the system automatically updates the correlation id on any subsequent messages sent. But like I said, it's may be dangerous. There's also extension methods to handle Ask, since that's implemented via extension methods.
Bartosz Sypytkowski
@Horusiath
Feb 10 2016 21:39
@nevaenuf maybe it would be easier to keep it inside actor's directly and update like:
public class CorrelatedActor : ReceiveActor {
    public Guid CurrentCorrelationId { get; private set; }
    protected override bool AroundReceive(object message, Receive receive) {
        var wrapper = message as CorrelatedWrapper;
        if (wrapper != null) {
          CurrentCorrelationId = wrapper.CorrelationId;
          base.Receive(wrapper.Message, receive);
        }
        else base.Receive(message, receive);
    }
}
it's a general idea - personally I'm not sure if I would try to hide this message type, but it depends on case and preferences . Also this can be (with a little effort) switcher to composition instead of inheritance
Amon-Ra Mackie
@nevaenuf
Feb 10 2016 21:42
Makes sense. The only thing that I would have to give up is that a developer would have to remember to copy the current correlation Id during a tell, correct?
Bartosz Sypytkowski
@Horusiath
Feb 10 2016 21:44
you can make your own - in some cases you need to wrap Tell with custom logic. This is how Deliver method works in at-least-once-delivery semantic
it's basically public void Post(IActorRef aref, object message) => aref.Tell(new CorrelatedWrapper(CurrentCorrelationId, message));
Amon-Ra Mackie
@nevaenuf
Feb 10 2016 21:49
@Horusiath Roger that. That's definitely an easier approach. Thanks!
Bartosz Sypytkowski
@Horusiath
Feb 10 2016 21:51
np :)
Damian Reeves
@DamianReeves
Feb 10 2016 23:00
Has anyone looked into communicating with actors systems over named pipes?
I imagine that would be a new transport layer