コード例 #1
0
        public void InvokeWithStateCopiesStateToHubProxy()
        {
            var hubResult = new HubResult
            {
                State = new Dictionary<string, JToken>
                {
                    { "state", JToken.FromObject(1) }
                }
            };

            var connection = new Mock<IHubConnection>();
            connection.Setup(m => m.RegisterCallback(It.IsAny<Action<HubResult>>()))
                      .Callback<Action<HubResult>>(callback =>
                      {
                          callback(hubResult);
                      });

            connection.Setup(m => m.Send(It.IsAny<string>()))
                      .Returns(TaskAsyncHelper.Empty);

            connection.SetupGet(x => x.JsonSerializer).Returns(new JsonSerializer());

            var hubProxy = new HubProxy(connection.Object, "foo");

            hubProxy.Invoke("Anything").Wait();

            Assert.Equal(1, hubProxy["state"]);
        }
コード例 #2
0
        /// <summary>離開群組</summary>
        /// <param name="groupName">群組名稱</param>
        public void LeaveGroup(string groupName)
        {
            List <object> args = new List <object> {
                groupName
            };
            string cmdCode = RecordMethodQueue("LeaveGroup", args);

            if (CurrState == ConnectionState.Connected)
            {
                HubProxy.Invoke("LeaveGroup", groupName, cmdCode);
            }
        }
コード例 #3
0
 protected async Task <T> ProxyInvoke <T>(string name, params object[] args)
 {
     try
     {
         return(await HubProxy.Invoke <T>(name, args));
     }
     catch (Exception ex)
     {
         OnHubProxyInvokeException(ex);
         return(default(T));
     }
 }
コード例 #4
0
        public async void Connect()
        {
            Connection = new HubConnection(ServerUrl);

            //to access autorized hub and map logged user u need to pass token
            Connection.Headers.Add("Authorization", String.Format("Bearer {0}", Properties.Settings.Default.access_token)); //THIS IS WHERE YOU ADD YOUR ACCESS TOKEN MENTIONED ABOVE

            HubProxy        = Connection.CreateHubProxy("SignalRTestHub");                                                  //hub name
            AnotherHubProxy = Connection.CreateHubProxy("AnotherSignalRTestHub");
            await Connection.Start();

            var myConnectedModelString = await HubProxy.Invoke <string>("getCurrentConnectedModel");//invoke to get my connection id and my logged in email

            this.displayConnectedUsers(myConnectedModelString);

            HubProxy.On("sayHello", (message) =>
                        this.Invoke((Action)(() =>
            {
                Console.WriteLine(Convert.ToString(message));
            }
                                             )
                                    )
                        );

            HubProxy.On("anotherSayHello", (message) =>
                        this.Invoke((Action)(() =>
            {
                Console.WriteLine(Convert.ToString(message));
            }
                                             )
                                    )
                        );

            HubProxy.On("allConnectedUsers", (message) =>
                        this.Invoke((Action)(() =>
            {
                Console.WriteLine(Convert.ToString(message));
                this.displayConnectedUsers(Convert.ToString(message));
            }
                                             )
                                    )
                        );

            HubProxy.On("listenMessage", (message) =>
                        this.Invoke((Action)(() =>
            {
                Console.WriteLine(Convert.ToString(message));
                txtRecieveMessage.Text = Convert.ToString(message);
            }
                                             )
                                    )
                        );
        }
コード例 #5
0
 public void UpdateMessage(int index, MessageInfo oldMessage)
 {
     if (index != -1)
     {
         MessageInfo newMessage = new MessageInfo();
         newMessage.MessageName    = "newName";
         newMessage.MessageContent = "newContent";
         HubProxy.Invoke("MessageUpdate", oldMessage.MessageName, oldMessage.MessageContent, newMessage.MessageName, newMessage.MessageContent);
         Member.MessageCollection.RemoveAt(index);
         Member.MessageCollection.Insert(index, newMessage);
     }
 }
コード例 #6
0
        private void button1_Click(object sender, EventArgs e)
        {
            Student stu = new Student {
                Name = txtName.Text,
                Age  = Convert.ToInt32(txtAge.Text),
                Id   = txtId.Text
            };

            HubProxy.Invoke("Send", stu);
            txtName.Text = String.Empty;
            txtName.Focus();
        }
コード例 #7
0
        public async void PostNotification(NotificationInfo notificationInfo)
        {
            await WaitConnectFalse();

            if (notificationInfo != null)
            {
                notificationInfo.Source = notificationInfo.Source == null ? Station : notificationInfo.Source;
            }

            notificationInfo.dateSend = DateTime.Now;
            await HubProxy.Invoke("OnNewNotification", notificationInfo);
        }
コード例 #8
0
ファイル: Program.cs プロジェクト: R3MUSDevPack/IntelLogger
        public static void GetLogFileNames(List <SSO.IntelMap.Models.GroupChannelName> data)
        {
            var catcher = new List <SSO.IntelMap.Models.GroupChannelName>();
            var dInfo   = new DirectoryInfo(Path);

            data.ForEach(group =>
            {
                group.Channels.ForEach(channel =>
                {
                    var fileInfo = dInfo.EnumerateFiles(string.Concat(channel, "*"))
                                   .OrderByDescending(o => o.LastWriteTimeUtc).FirstOrDefault();

                    if (fileInfo != null)
                    {
                        var flag1 = false;

                        Console.WriteLine("Listening to channel " + channel);
                        catcher.Add(group);
                        LogFileModel model = LogFileHelper.ParseLogFile(fileInfo.FullName, group.Group);
                        DateTime createdAt = model.CreatedAt;

                        if (model.LogLines.Count > 0)
                        {
                            createdAt = Enumerable.Last <LogLine>(model.LogLines).LogDateTime;
                        }
                        if (!ReadFromTimes.ContainsKey(group.Group))
                        {
                            flag1 = false;
                        }
                        else
                        {
                            flag1 = ReadFromTimes.FirstOrDefault().Value < createdAt;
                        }
                        if (flag1)
                        {
                            ReadFromTimes.Remove(group.Group);
                        }
                        if (!ReadFromTimes.ContainsKey(group.Group))
                        {
                            ReadFromTimes.Add(group.Group, createdAt);
                        }
                    }
                });
            });

            catcher = catcher.Distinct().ToList();
            catcher.ForEach(group => {
                HubProxy.Invoke("joinGroup", group.Group);
            });
            Console.WriteLine();
            LogFileNames = catcher;
        }
コード例 #9
0
ファイル: Form1.cs プロジェクト: weijx-xa/test
        private async void buttonapp_Click(object sender, EventArgs e)
        {
            try
            {
                var appver = textBoxappver.Text;
                var ret    = new VaultAppModel
                {
                    AppId    = 1,
                    Guid     = textBoxguid.Text,
                    IsUpdate = true,
                    Version  = appver
                };

                //try
                //{
                //    var di = new DirectoryInfo(textBoxapppath.Text);
                //    var files = di.GetFiles();
                //    foreach (FileInfo fileInfo in files)
                //    {
                //        if (fileInfo.Name.Contains(textBoxappver.Text))
                //        {
                //            var apppath = Path.Combine(textBoxapppath.Text, string.Format("1-{0}.zip", appver));
                //            try
                //            {

                //                ret.ZipFile = File.ReadAllBytes(apppath);
                //            }
                //            catch (Exception ex)
                //            {
                //                richTextBoxlog.AppendText(Environment.NewLine + apppath + ex.Message);
                //                return;
                //            }
                //                break;
                //        }
                //    }
                //}
                //catch (Exception ex)
                //{
                //    richTextBoxlog.AppendText(Environment.NewLine + string.Format("app release error:{0},{1},{2},{3}",
                //        textBoxappver.Text, textBoxweburl.Text, textBoxapppath.Text, ex.Message));
                //    return;
                //}
                richTextBoxlog.AppendText(Environment.NewLine + "PushNewApp. " + " before invoke.");
                await HubProxy.Invoke("PushNewApp", ret);

                richTextBoxlog.AppendText(Environment.NewLine + "PushNewApp." + " ok.");
            }
            catch (Exception ex)
            {
                richTextBoxlog.AppendText(Environment.NewLine + "PushNewApp." + ex.Message);
            }
        }
コード例 #10
0
ファイル: DataManager.cs プロジェクト: anhtv13/ATD_Chat
        public async Task <ChatResult <List <MessageInfo> > > SearchMessage(string receiverId, DateTime fromDate, DateTime toDate, int messageType)
        {
            try
            {
                ChatResult <List <MessageInfo> > result = await HubProxy.Invoke <ChatResult <List <MessageInfo> > >(ServerEventNames.SearchMessage, receiverId, fromDate, toDate, messageType);

                return(result);
            }
            catch (Exception ex)
            {
                return(new ChatResult <List <MessageInfo> >(false, ex.ToString(), null));
            }
        }
コード例 #11
0
ファイル: DataManager.cs プロジェクト: anhtv13/ATD_Chat
        public async Task <ChatResult> ChangeCustomerName(string newCustomerName)
        {
            try
            {
                ChatResult result = await HubProxy.Invoke <ChatResult>(ServerEventNames.ChangeCustomerName, newCustomerName);

                return(result);
            }
            catch (Exception ex)
            {
                return(new ChatResult(false, ex.Message));
            }
        }
コード例 #12
0
ファイル: DataManager.cs プロジェクト: anhtv13/ATD_Chat
        public async Task <ChatResult> RemoveCustomerFromGroup(string customerId, string groupId)
        {
            try
            {
                ChatResult result = await HubProxy.Invoke <ChatResult>(ServerEventNames.RemoveCustomerFromGroup, customerId, groupId);

                return(result);
            }
            catch (Exception ex)
            {
                return(new ChatResult(false, ex.Message));
            }
        }
コード例 #13
0
ファイル: DataManager.cs プロジェクト: anhtv13/ATD_Chat
        public async Task <ChatResult> InviteToGroupRequest(string customerId, string groupId)
        {
            try
            {
                ChatResult result = await HubProxy.Invoke <ChatResult>(ServerEventNames.InviteToGroupRequest, customerId, groupId);

                return(result);
            }
            catch (Exception ex)
            {
                return(new ChatResult(false, ex.Message));
            }
        }
コード例 #14
0
ファイル: DataManager.cs プロジェクト: anhtv13/ATD_Chat
        public async Task <ChatResult> InviteToGroupRespond(string requestId, bool agree)
        {
            try
            {
                ChatResult result = await HubProxy.Invoke <ChatResult>(ServerEventNames.InviteToGroupRespond, requestId, agree);

                return(result);
            }
            catch (Exception ex)
            {
                return(new ChatResult(false, ex.Message));
            }
        }
コード例 #15
0
ファイル: DataManager.cs プロジェクト: anhtv13/ATD_Chat
        public async Task <ChatResult> ChangeGroupDescription(string groupId, string description)
        {
            try
            {
                ChatResult result = await HubProxy.Invoke <ChatResult>(ServerEventNames.ChangeGroupDescription, groupId, description);

                return(result);
            }
            catch (Exception ex)
            {
                return(new ChatResult(false, ex.Message));
            }
        }
コード例 #16
0
ファイル: DataManager.cs プロジェクト: anhtv13/ATD_Chat
        public async Task <ChatResult> ChangeGroupPrivate(string groupId, bool isPrivate)
        {
            try
            {
                ChatResult result = await HubProxy.Invoke <ChatResult>(ServerEventNames.ChangeGroupPrivacy, groupId, isPrivate);

                return(result);
            }
            catch (Exception ex)
            {
                return(new ChatResult(false, ex.Message));
            }
        }
コード例 #17
0
ファイル: DataManager.cs プロジェクト: anhtv13/ATD_Chat
        public async Task <ChatResult <List <CustomerInfo> > > SearchCustomer(string customerNameKeyword)
        {
            try
            {
                ChatResult <List <CustomerInfo> > result = await HubProxy.Invoke <ChatResult <List <CustomerInfo> > >(ServerEventNames.SearchCustomer, customerNameKeyword);

                return(result);
            }
            catch (Exception ex)
            {
                return(ChatResult <List <CustomerInfo> > .CreateInstance(false, ex.Message, null));
            }
        }
コード例 #18
0
        public async Task ConnectToServer()
        {
            var hubConnection = new HubConnection(ServerUrl);

            HubProxy = hubConnection.CreateHubProxy(ServerHubName);
            await hubConnection.Start();

            await HubProxy.Invoke(ConnectMethod, new ConnectDeviceData()
            {
                DeviceName = DeviceName,
                SecretKey  = SecretKey
            });
        }
コード例 #19
0
ファイル: DataManager.cs プロジェクト: anhtv13/ATD_Chat
        public async Task <ChatResult> LeaveGroup(string groupId)
        {
            try
            {
                ChatResult result = await HubProxy.Invoke <ChatResult>(ServerEventNames.LeaveGroup, groupId);

                return(result);
            }
            catch (Exception ex)
            {
                return(new ChatResult(false, ex.Message));
            }
        }
コード例 #20
0
ファイル: DataManager.cs プロジェクト: anhtv13/ATD_Chat
 public void GetInventory()
 {
     HubProxy.Invoke <ChatResult>(ServerEventNames.GetInventory).ContinueWith(task =>
     {
         if (task.IsFaulted)
         {
         }
         else
         {
             ChatResult result = task.Result;
         }
     });
 }
コード例 #21
0
        public async Task CallClientGroupsAsync(string[] groups, string method, params object[] args)
        {
            try
            {
                ThrowExceptionIfDisposed();

                await HubProxy.Invoke("CallClientGroupsAsync", groups, method, args);
            }
            catch (Exception exp)
            {
                MessageBox.Show(exp.Message, exp.Source);
            }
        }
コード例 #22
0
        private async void HubConnectAsync()
        {
            Connection         = new HubConnection(Strings.ServerUri);
            Connection.Closed += Connection_Closed;
            HubProxy           = Connection.CreateHubProxy("GameHub");
            HubProxy.On("RefreshGameInfo", () =>
                        this.Dispatcher.Invoke(RefreshGameInfo));
            HubProxy.On("OtherPlayerLeft", () => this.Dispatcher.Invoke(OtherPlayerLeft));

            await Connection.Start();

            HubProxy.Invoke("Update"); //TODO: We need this shiet
        }
コード例 #23
0
ファイル: DataManager.cs プロジェクト: anhtv13/ATD_Chat
        public async Task <ChatResult> DeleteMessage(string messageId)
        {
            try
            {
                ChatResult result = await HubProxy.Invoke <ChatResult>(ServerEventNames.DeleteMessage, messageId);

                return(result);
            }
            catch (Exception ex)
            {
                return(new ChatResult(false, ex.Message));
            }
        }
コード例 #24
0
ファイル: DataManager.cs プロジェクト: anhtv13/ATD_Chat
        public async Task <ChatResult <List <GroupInfo> > > SearchGroup(string groupName)
        {
            try
            {
                ChatResult <List <GroupInfo> > result = await HubProxy.Invoke <ChatResult <List <GroupInfo> > >(ServerEventNames.SearchGroup, groupName);

                return(result);
            }
            catch (Exception ex)
            {
                return(ChatResult <List <GroupInfo> > .CreateInstance(false, ex.Message, null));
            }
        }
コード例 #25
0
ファイル: DataManager.cs プロジェクト: anhtv13/ATD_Chat
        public async Task <ChatResult> UnFriend(string friendId)
        {
            try
            {
                ChatResult result = await HubProxy.Invoke <ChatResult>(ServerEventNames.UnFriend, friendId);

                return(result);
            }
            catch (Exception ex)
            {
                return(new ChatResult(false, ex.Message));
            }
        }
コード例 #26
0
        private void ButtonSend_Click(object sender, EventArgs e)
        {
            var toId = (string)lblModel.Tag;

            toId = (toId == "ALL") ? string.Empty : toId;
            imcp = new IMCommParamMessage()
            {
                msgType = msgType.Text, fromConnId = imModel.ConnId, toConnId = toId, message = TextBoxMessage.Text, isSuccess = true
            };
            HubProxy.Invoke("SendMessage", JsonConvert.SerializeObject(imcp));
            TextBoxMessage.Text = String.Empty;
            TextBoxMessage.Focus();
        }
コード例 #27
0
ファイル: DataManager.cs プロジェクト: anhtv13/ATD_Chat
        public async Task <ChatResult> BroadcastMessage(MessageInfo msg)
        {
            try
            {
                ChatResult result = await HubProxy.Invoke <ChatResult>(ServerEventNames.BroadcastMessage, msg);

                return(result);
            }
            catch (Exception ex)
            {
                return(new ChatResult(false, ex.Message));
            }
        }
コード例 #28
0
        //#region 获得组织结构 Modefing...
        //private void setGroups(string jsonString) {
        //    //MessageBox.Show(jsonString);
        //    List<GroupModel> Groups = JsonConvert.DeserializeObject<List<GroupModel>>(jsonString);
        //    this.Invoke((Action)(() => {
        //        RichTextBoxConsole.AppendText(string.Format("{0}: {1}" + Environment.NewLine, "Server-Groups", Groups.Count));
        //        //生成MD5,与jsonString 保存到配置文件

        //        treeView1.Nodes.Clear();
        //        TreeNode tn = json2TreeNode(jsonString);
        //        foreach (TreeNode n in tn.Nodes)
        //            treeView1.Nodes.Add(n);

        //    }));
        //}
        //private TreeNode json2TreeNode(string jsonstring) {
        //    OrganizationalNode tn = JsonConvert.DeserializeObject<OrganizationalNode>(jsonstring);
        //    var user = tn.Tag.GetType().Equals(typeof(UserModel)) ? tn.Tag as UserModel : null;
        //    TreeNode returnNode = new TreeNode() {
        //        Name = tn.Id.ToString() + tn.Name,
        //        Text = tn.Name,
        //        ToolTipText = tn.Title,
        //        Tag = tn.Tag,
        //        StateImageKey = (user == null ? string.Empty : user.conntionId),
        //        ForeColor = (user == null ? System.Drawing.Color.Black : System.Drawing.Color.Green)
        //    };

        //    if (!(tn.Nodes is null) && tn.Nodes.Count > 0) {
        //        foreach(OrganizationalNode on in tn.Nodes)
        //        returnNode.Nodes.Add(getNode(on));
        //    }

        //    return returnNode;
        //}
        //private TreeNode getNode(OrganizationalNode on) {
        //    var user = on.Tag.GetType().Equals(typeof(UserModel)) ? on.Tag as UserModel : null;
        //    TreeNode returnNode = new TreeNode() {
        //        Name = on.Id.ToString() + on.Name,
        //        Text = on.Name,
        //        ToolTipText = on.Title,
        //        Tag = on.Tag,
        //        StateImageKey = (user == null ? string.Empty : user.conntionId),
        //        ForeColor = (user == null ? System.Drawing.Color.Black : System.Drawing.Color.Green)
        //    };
        //    if (!(on.Nodes is null) && on.Nodes.Count > 0) {
        //        foreach (OrganizationalNode on1 in on.Nodes)
        //            returnNode.Nodes.Add(getNode(on1));
        //    }
        //    return returnNode;
        //}
        //#endregion

        //private void setUserState(string jsonstring) {
        //    UserModel user = JsonConvert.DeserializeObject<UserModel>(jsonstring);
        //    var userNodes = treeView1.Nodes.Find(user.userId.ToString() + user.userName, true);
        //    if (userNodes != null && userNodes.Length > 0) {
        //        var userNode = userNodes[0];
        //        userNode.ForeColor = System.Drawing.Color.Green;
        //        userNode.StateImageKey = user.conntionId;
        //    }
        //}

        private void Connection_Succeed()
        {
            imModel.ConnId = Connection.ConnectionId;
            this.Invoke((Action)(() => {
                treeView1.Nodes.Clear();
                treeView2.Nodes.Clear();
                treeView1.Nodes.Add("ALL", "ALL");
                treeView2.Nodes.Add("ALL", "ALL");
            }));
            Services.Clear();
            Clients.Clear();
            HubProxy.Invoke("GetOnlineServices");
            HubProxy.Invoke("GetOnlineClients");
        }
コード例 #29
0
        public async Task CallByTypeClientsAsync(List <string> usernames, string type, string method, string[] paramTypes,
                                                 params object[] args)
        {
            try
            {
                ThrowExceptionIfDisposed();

                await HubProxy.Invoke("CallByTypeClientsAsync", usernames, type, method, paramTypes, args);
            }
            catch (Exception exp)
            {
                MessageBox.Show(exp.Message, exp.Source);
            }
        }
コード例 #30
0
 public Task SendData(string data)
 {
     return(HubProxy.Invoke("addMessage",
                            new Message {
         Sender = User, Text = data, Date = DateTime.Now
     })
            .ContinueWith(task =>
     {
         if (task.IsFaulted)
         {
             WriteLine($"Exception:{task.Exception.InnerException.Message}");
         }
     }));
 }
コード例 #31
0
        private void FieldButtonClick(object sender, RoutedEventArgs e)
        {
            Button button         = sender as Button;
            var    buttonPosition = button.Name.Substring(button.Name.IndexOf("button") + "button".Length + 1);

            if (this.gameMode == GameMode.Online)
            {
                if (this.gameData.GameState == "FirstPlayerTurn" ||
                    this.gameData.GameState == "SecondPlayerTurn")
                {
                    HttpClient _httpClient = new HttpClient();
                    var        bearer      = "Bearer " + loginData.Access_Token;

                    var content = new FormUrlEncodedContent(new[]
                    {
                        new KeyValuePair <string, string>("id", gameData.Id.ToString()),
                        new KeyValuePair <string, string>("Position", buttonPosition),
                    });

                    _httpClient.DefaultRequestHeaders.Add("Authorization", bearer);
                    var response = _httpClient.PostAsync(Endpoint.MakeMove, content).Result;

                    if (response.IsSuccessStatusCode)
                    {
                        button.Content = this.gameData.GameState == "FirstPlayerTurn" ? 'O' : 'X';
                        HubProxy.Invoke("Update");
                    }
                    else
                    {
                        MessageBox.Show(response.Content.ReadAsStringAsync().Result);
                    }
                }
            }
            else if (this.gameMode == GameMode.Singleplayer)
            {
                if (this.gameData.EnumGameState == GameState.FirstPlayer)
                {
                    SinglePlayerMove(buttonPosition, button);
                    AIMove(buttonPosition, button);
                }
            }
            else if (this.gameMode == GameMode.Multiplayer)
            {
                if (this.gameData.EnumGameState == GameState.FirstPlayer ||
                    this.gameData.EnumGameState == GameState.SecondPlayer)
                {
                    MultiPlayerMove(buttonPosition, button);
                }
            }
        }
コード例 #32
0
        public void InvokeWithErrorInHubResultReturnsFaultedTask()
        {
            var result = new HubResult<object>
            {
                Error = "This in an error"
            };

            var connection = new Mock<SignalR.Client.IConnection>();
            connection.Setup(m => m.Send<HubResult<object>>(It.IsAny<string>()))
                      .Returns(TaskAsyncHelper.FromResult(result));

            var hubProxy = new HubProxy(connection.Object, "foo");

            AssertAggregateException(() => hubProxy.Invoke("Invoke").Wait(),
                                     "This in an error");
        }
コード例 #33
0
ファイル: HubProxyTest.cs プロジェクト: ninjaAB/SignalR
        public void InvokeReturnsHubsResult()
        {
            var hubResult = new HubResult<object>
            {
                Result = "Something"
            };

            var connection = new Mock<SignalR.Client.IConnection>();
            connection.Setup(m => m.Send<HubResult<object>>(It.IsAny<string>()))
                      .Returns(TaskAsyncHelper.FromResult(hubResult));

            var hubProxy = new HubProxy(connection.Object, "foo");

            var result = hubProxy.Invoke<object>("Anything").Result;

            Assert.Equal(result, "Something");
        }
コード例 #34
0
        public void InvokeWithStateCopiesStateToHubProxy()
        {
            var result = new HubResult<object>
            {
                State = new Dictionary<string, object>
                {
                    { "state", 1 }
                }
            };

            var connection = new Mock<SignalR.Client.IConnection>();
            connection.Setup(m => m.Send<HubResult<object>>(It.IsAny<string>()))
                      .Returns(TaskAsyncHelper.FromResult(result));

            var hubProxy = new HubProxy(connection.Object, "foo");

            hubProxy.Invoke("Anything").Wait();

            Assert.Equal(1, hubProxy["state"]);
        }
コード例 #35
0
ファイル: HubProxyFacts.cs プロジェクト: stirno/SignalR
        public void InvokeReturnsHubsResult()
        {
            var hubResult = new HubResult
            {
                Result = "Something"
            };

            var connection = new Mock<SignalR.Client.Hubs.IHubConnection>();
            connection.Setup(m => m.RegisterCallback(It.IsAny<Action<HubResult>>()))
                      .Callback<Action<HubResult>>(callback =>
                      {
                          callback(hubResult);
                      });

            connection.Setup(m => m.Send(It.IsAny<string>()))
                      .Returns(TaskAsyncHelper.Empty);

            var hubProxy = new HubProxy(connection.Object, "foo");

            var result = hubProxy.Invoke<object>("Anything").Result;

            Assert.Equal(result, "Something");
        }
コード例 #36
0
        public void InvokeWithErrorInHubResultReturnsFaultedTask()
        {
            var hubResult = new HubResult
            {
                Error = "This in an error"
            };

            var connection = new Mock<IHubConnection>();
            connection.Setup(m => m.RegisterCallback(It.IsAny<Action<HubResult>>()))
                      .Callback<Action<HubResult>>(callback =>
                      {
                          callback(hubResult);
                      });

            connection.Setup(m => m.Send(It.IsAny<string>()))
                      .Returns(TaskAsyncHelper.Empty);

            connection.SetupGet(x => x.JsonSerializer).Returns(new JsonSerializer());

            var hubProxy = new HubProxy(connection.Object, "foo");

            TestUtilities.AssertAggregateException(() => hubProxy.Invoke("Invoke").Wait(),
                                     "This in an error");
        }
コード例 #37
0
        public void FailedHubCallbackDueToReconnectFollowedByInvoke()
        {
            // Arrange
            var testTcs = new TaskCompletionSource<object>();
            var crashTcs = new TaskCompletionSource<object>();
            var connection = new HubConnection("http://test");
            var transport = new Mock<IClientTransport>();

            transport.Setup(t => t.Negotiate(connection, /* connectionData: */ It.IsAny<string>()))
                     .Returns(TaskAsyncHelper.FromResult(new NegotiationResponse
                     {
                         ProtocolVersion = connection.Protocol.ToString(),
                         ConnectionId = "Something",
                         DisconnectTimeout = 120
                     }));

            transport.Setup(t => t.Start(connection, /* connectionData: */ It.IsAny<string>(), /* disconnectToken: */ It.IsAny<CancellationToken>()))
                     .Returns(TaskAsyncHelper.Empty);

            transport.Setup(t => t.Send(connection, /* data: */ It.Is<string>(s => s.IndexOf("crash") >= 0), /* connectionData: */ It.IsAny<string>()))
                     .Returns(crashTcs.Task) // We want this task to never complete as the call to EnsureReconnecting will do it for us
                     .Callback(() =>
                     {
                         Task.Run(() =>
                         {
                             try
                             {
                                 // EnsureReconnecting will change the state and ultimately clear the pending invocation callbacks
                                 connection.EnsureReconnecting();
                                 testTcs.SetResult(null);
                             }
                             catch (Exception ex)
                             {
                                 testTcs.SetException(ex);
                             }
                         });
                     });

            var proxy = new HubProxy(connection, "test");

            // Act
            connection.Start(transport.Object).Wait();
            var crashTask = proxy.Invoke("crash")
                .ContinueWith(t => proxy.Invoke("test"),
                    TaskContinuationOptions.ExecuteSynchronously); // We need to ensure this executes sync so we're on the same stack

            // Assert
            Assert.Throws(typeof(AggregateException), () => crashTask.Wait());
            Assert.DoesNotThrow(() => testTcs.Task.Wait());
        }
コード例 #38
0
        public void HubCallbackClearedOnFailedInvocation()
        {
            var connection = new Mock<HubConnection>("http://foo");
            var tcs = new TaskCompletionSource<object>();

            tcs.TrySetCanceled();

            connection.Setup(c => c.Send(It.IsAny<string>())).Returns(tcs.Task);

            var hubProxy = new HubProxy(connection.Object, "foo");

            var aggEx = Assert.Throws<AggregateException>(() => { hubProxy.Invoke("foo", "arg1").Wait(); });
            var ex = aggEx.Unwrap();

            Assert.IsType(typeof(TaskCanceledException), ex);

            Assert.Equal(connection.Object._callbacks.Count, 0);
        }
コード例 #39
0
        public void InvokeWorksWithNullArgument()
        {
            var connection = new Mock<IHubConnection>();
            connection.Setup(c => c.RegisterCallback(It.IsAny<Action<HubResult>>()))
                      .Callback<Action<HubResult>>(callback =>
                      {
                          callback(new HubResult());
                      });

            connection.Setup(m => m.Send(It.IsAny<string>())).Returns(TaskAsyncHelper.Empty);
            connection.SetupGet(x => x.JsonSerializer).Returns(new JsonSerializer());

            var hubProxy = new HubProxy(connection.Object, "foo");

            var o = new NullInvokeTest { Name = null, Number = 42, Strings = new[] { "Kazimierz", null, "Tetmajer" } };
            hubProxy.Invoke("method", 1, null, new[] { "a", "b" }, o);

            connection.Verify(
                c => c.Send(@"{""I"":null,""H"":""foo"",""M"":""method""," +
                @"""A"":[1,null,[""a"",""b""],{""Name"":null,""Number"":42,""Strings"":[""Kazimierz"",null,""Tetmajer""]}]}"),
                Times.Once());
        }