SignalR是否有任何处理user1的功能是向user1键入user1当前正在键入的警告? 我见过的例子都是ajax或jquery。这是针对使用SignalR
的用户之间的CHAT答案 0 :(得分:2)
我们在焦点和文本字段的模糊事件上执行此操作。我们在集线器上调用一个函数,向所有客户端广播一个关于用户的简单消息,例如type = true,id设置为来自上下文的连接id。然后在客户端,这突出显示用户使用下划线或不同的颜色,以查看用户正忙于输入内容。在我们的应用程序中,多个用户可以键入,但您可以获得该概念。
你基本上需要3件事
我们在焦点上使用它并提出一个标志,因此我们不会向服务器发送太多请求,但您可以通过各种方式对其进行优化。
答案 1 :(得分:1)
这不是内置功能,但可以通过SignalR轻松完成。这是在JabbR中完成的(http://jabbr.net/,https://github.com/davidfowl/JabbR)。
我们的想法是通过JavaScript处理文本onchange事件,然后联系服务器以通知另一个客户有人正在键入。
答案 2 :(得分:1)
使用我的代码
在中心
public class ChatHub : Hub
{
public void Send(string name, string message)
{
// Call the addNewMessageToPage method to update clients.
Clients.All.addNewMessageToPage(name, message);
}
public void IsTyping(string html)
{
// do stuff with the html
SayWhoIsTyping(html); //call the function to send the html to the other clients
}
public void SayWhoIsTyping(string html)
{
IHubContext context = GlobalHost.ConnectionManager.GetHubContext<ChatHub>();
context.Clients.All.sayWhoIsTyping(html);
}
}
和在cshtml中
@{
Layout = null;
}
<h2>Chat</h2>
<div class="container">
<input type="text" id="message" />
<input type="button" id="sendmessage" value="Send" />
<input type="hidden" id="displayname" />
<ul id="discussion"></ul>
<div id="Status"></div>
</div>
<script src="@Url.Content("~/Scripts/jquery-1.10.2.min.js")"></script>
<script src="@Url.Content("~/Scripts/jquery.signalR-2.2.0.min.js")"></script>
<script src="~/signalr/hubs"></script>
<script>
$(function () {
var chat = $.connection.chatHub;
chat.client.addNewMessageToPage = function (name, message) {
$('#discussion').append('<li><strong>' + htmlEncode(name)
+ '</strong>: ' + htmlEncode(message) + '</li>');
};
chat.client.SayWhoIsTyping = function (html) {
$('#Status').html('<li>' + htmlEncode(html) + '</li>');
setInterval(function () { $('#Status').html(''); }, 3000);
};
$('#displayname').val(prompt('Enter your name:', ''));
$('#message').focus();
$.connection.hub.start().done(function () {
$('#message').keydown(function () {
var encodedName = $('<div />').text($('#displayname').val() + " is Typing...").html();
chat.server.isTyping(encodedName);
}),
$('#sendmessage').click(function () {
chat.server.send($('#displayname').val(), $('#message').val());
$('#message').val('').focus();
});
});
});
function htmlEncode(value) {
var encodedValue = $('<div />').text(value).html();
return encodedValue;
}
</script>
&#13;