private void ConnectServerEvents() { if (serverEventsClient == null) { // var client = new ServerEventsClient("http://chat.servicestack.net", channels: "home") // bla.ybookz.com is a copy of the SS Chat sample, that sends 'HAHAHAHA' every second to all listeners //serverEventsClient = new ServerEventsClient("http://bla.ybookz.com/", channels: "home") //serverEventsClient = new ServerEventsClient("http://10.0.2.2:1337/", channels: "home") serverEventsClient = new ServerEventsClient("http://chat.servicestack.net", channels: "home") { OnConnect = e => { connectMsg = e; }, OnCommand = a => { commands.Add(a); }, OnHeartbeat = () => { RunOnUiThread(() => { try { Toast.MakeText(this, "Heartbeat", ToastLength.Short).Show(); } catch {} }); }, OnMessage = a => { msgs.Add(a); if (lastText != a.Data) { lastText = a.Data ?? ""; RunOnUiThread(() => { try { Toast.MakeText(this, lastText, ToastLength.Short).Show(); } catch {} }); } }, OnException = ex => { AddMessage("OnException: " + ex.Message); errors.Add(ex); }, HeartbeatRequestFilter = x => { AddMessage("HeartbeatRequestFilter"); }, }; AddMessage("Started Listening..."); serverEventsClient.Start(); } }
public static async Task UpdateUserProfile(this ServerEventConnect connectMsg, Activity activity) { Application.SynchronizationContext.Post(_ => { var txtUser = activity.FindViewById <TextView>(Resource.Id.txtUserName); txtUser.Text = connectMsg.DisplayName; }, null); var bitmap = await connectMsg.ProfileUrl.GetImageBitmap(); Application.SynchronizationContext.Post(_ => { var imgProfile = activity.FindViewById <ImageView>(Resource.Id.imgProfile); imgProfile.SetImageBitmap(bitmap); }, null); }
public async void Does_fire_all_callbacks() { using (var client1 = CreateServerEventsClient()) { ServerEventConnect connectMsg = null; var msgs = new List <ServerEventMessage>(); var commands = new List <ServerEventMessage>(); var errors = new List <Exception>(); client1.OnConnect = e => connectMsg = e; client1.OnCommand = commands.Add; client1.OnMessage = msgs.Add; client1.OnException = errors.Add; //Pop Connect + onJoin messages off var taskConnect = client1.Connect(); var taskCmd = client1.WaitForNextCommand(); await taskConnect.WaitAsync(); await taskCmd.WaitAsync(); var joinMsg = commands.OfType <ServerEventJoin>().FirstOrDefault(); Assert.That(connectMsg, Is.Not.Null, "connectMsg == null"); Assert.That(joinMsg, Is.Not.Null, "joinMsg == null"); Assert.That(msgs.Count, Is.EqualTo(0)); Assert.That(errors.Count, Is.EqualTo(0)); Assert.That(commands.Count, Is.EqualTo(1)); //join commands.Clear(); "New Client....".Print(); taskCmd = client1.WaitForNextCommand(); using (var client2 = CreateServerEventsClient()) { var connectMsg2 = await client2.Connect(); if (taskCmd != await Task.WhenAny(taskCmd, Task.Delay(2000))) { throw new TimeoutException(); } joinMsg = commands.OfType <ServerEventJoin>().FirstOrDefault(); taskCmd = client1.WaitForNextCommand(); connectMsg2.UnRegisterUrl.GetStringFromUrl(); //unsubscribe 2nd client } await taskCmd.WaitAsync(); var leaveMsg = commands.OfType <ServerEventLeave>().FirstOrDefault(); Assert.That(joinMsg, Is.Not.Null, "joinMsg == null"); //2nd connection Assert.That(leaveMsg, Is.Not.Null, "leaveMsg == null"); Assert.That(commands.Count, Is.EqualTo(2)); //join + leave Assert.That(errors.Count, Is.EqualTo(0)); } }