示例#1
0
        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);
        }
示例#3
0
        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();
            }
        }
示例#4
0
        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));
            }
        }