protected void DoConnect(string order, string host) { // find in directory DirectoryActor.GetDirectory().Find(this, host); ReceiveAsync(ask => (ask is IMessageParam <DirectoryActor.DirectoryRequest, IActor>)).ContinueWith( r => { IMessageParam <DirectoryActor.DirectoryRequest, IActor> ans = (IMessageParam <DirectoryActor.DirectoryRequest, IActor>)(r.Result); if (ans.Item2 != null) { SendByName.Send("Server found", "Console"); ans.Item2.SendMessage(new ServerMessage <string>(this, ServerRequest.Connect, default)); ReceiveAsync(m => { ServerMessage <string> sm = m as ServerMessage <string>; return(m != null && (sm.Request.Equals(ServerRequest.Accept))); }).ContinueWith( (c) => { SendByName.Send("Client connected", "Console"); aClient.Connect(ans.Item2); Become(aClient); }, TaskScheduler.Default); } else { // Console.WriteLine("Retry"); this.SendMessage(order, host); // Become(null); } }, TaskScheduler.Default); // repeat message }
public IDisposable Subscribe(IObserver <T> observer) { Task <object> res = ReceiveAsync(t => t is IMessageParam <IActor, IDisposable>); SendMessage(observer); IMessageParam <IActor, IDisposable> resi = res.Result as IMessageParam <IActor, IDisposable>; return(resi.Item2); }
private async void button2_Click(object sender, EventArgs e) { if (resultActor != null) { IMessageParam <long, long> data = await resultActor.GetResult().ResultAsync(); textBox1.AppendText(string.Format("Somme {0} Quantité {1} \n", data.Item1, data.Item2)); } }
public static async Task <Object> Receive <T1, T2, T3, T4>(this BaseActor anActor, Func <T1, T2, T3, T4, bool> aPattern) { CheckArg.Actor(anActor); return(await anActor.Receive((o) => { IMessageParam <T1, T2, T3, T4> t = o as IMessageParam <T1, T2, T3, T4>; return t != null ? aPattern(t.Item1, t.Item2, t.Item3, t.Item4) : false; })); }