gpt4 book ai didi

c# - 如何通过 SignalR 实现 'Who is typing' 功能?

转载 作者:可可西里 更新时间:2023-11-01 02:39:33 30 4
gpt4 key购买 nike

我基本上是在我的网站上实现 SignalR 聊天。我已经可以向所有连接的用户发送消息,现在我希望添加“谁在输入”功能。我正在尝试将它添加到 $('#message').keypress 函数中,它可以工作,但现在我无法向用户发送消息。

我做错了什么?

移除$('#message').keypress后可以发送消息

没有删除 $('#message').keypress 无法发送消息

enter image description here

我的html{

<input type="text" id="message" />
<input type="button" id="sendmessage" value="Send" class="btn btn-default" />
<input type="hidden" id="displayname" />
<label id="isTyping" />
<ul id="discussion"></ul>

脚本如下:

<!--SignalR script to update the chat page and send messages.-->
<script type="text/javascript">
$(function () {
// Reference the auto-generated proxy for the hub.
var chat = $.connection.chatHub;
// Create a function that the hub can call back to display messages.

chat.client.broadcastMessage = function (name, message) {
$('#discussion').append('<li><strong>' + name
+ '</strong>:&nbsp;&nbsp;' + message + '</li>');
};

chat.client.sayWhoIsTyping = function (name) {
$('#isTyping').html('<em>' + name + ' is typing...</em>');
setTimeout(function () {
$('#isTyping').html('&nbsp;');
}, 5000);
};

// Get the user name and store it to prepend to messages.
$('#displayname').val(prompt('Enter your name:', ''));
// Set initial focus to message input box.
$('#message').focus();

// Start the connection.
$.connection.hub.start().done(function () {

$('#sendmessage').click(function () {
var encodedName = $('<div />').text($('#displayname').val()).html();
var encodedMsg = $('<div />').text($('#message').val()).html();
chat.server.sendPublic(encodedName, encodedMsg);
$('#message').val('').focus();
});

$('#message').keypress(function (e) {
if (e.which == 13) {
var encodedName = $('<div />').text($('#displayname').val()).html();
var encodedMsg = $('<div />').text($('#message').val()).html();
chat.server.sendPublic(encodedName, encodedMsg);
$('#message').val('').focus();
} else {
var encodedName = $('<div />').text($('#displayname').val()).html();
chat.server.isTyping(encodedName);
}
});
});



// This optional function html-encodes messages for display in the page.
function htmlEncode(value) {
var encodedValue = $('<div />').text(value).html();
return encodedValue;
}

下面是我的 Hub 代码:

    public void SendPublic(string name, string message)
{
// Call the addNewMessageToPage method to update clients
Clients.All.broadcastMessage(name, message);
}

public void IsTyping(string name)
{
SayWhoIsTyping(name);
}

public void SayWhoIsTyping(string name)
{
IHubContext context = GlobalHost.ConnectionManager.GetHubContext<ChatHub>();
context.Clients.All.sayWhoIsTyping(name);
}

最佳答案

在您的服务器上,您的 ChatHub 中必须有两个方法,名称为:

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);
}

这个过程是如何运作的?

您捕捉到您的一位客户正在键入的事件,即使用来自 javascript 的按键功能。然后,您使用所需的 html 从服务器调用一个函数,其中包含名称和其他信息。服务器接收信息,对其进行处理,然后从客户端调用一个函数来显示谁在打字。

在您的情况下,服务器的 IsTyping 方法将处理来自客户端的信息,而服务器的 SayWhoIsTyping 方法将调用客户端以处理它所需的信息。

编辑您的评论:

我建议像这样从 javascript 修改函数:

chat.client.sayWhoIsTyping = function (name) {
$('#isTyping').html('<em>' + name + ' is typing...</em>');
setTimeout(function () {
$('#isTyping').html('&nbsp;');
}, 5000);
};

$('#message').keypress(function(e) {
if (e.which == 13) {
$('#sendmessage').trigger('click');
} else {
var encodedName = $('<div />').text($('#displayname').val()).html();
chat.server.isTyping(encodedName);
}
});

并删除$(document).keypress 函数。

关于c# - 如何通过 SignalR 实现 'Who is typing' 功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25758914/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com