我正在使用SignalR为HRM项目开发聊天模块。除了用户在线列表和聊天框中的头像和用户名不匹配外,一切正常。例如,在浏览器1中,登录用户名1是:thanhliem和avatar url liem.png,用户名2是:来自broswer 2的管理员,但它使用相同的头像网址用于不同的用户名。在浏览器2中,登录用户名1为admin,avatar url为admin.png,用户名2为thanhliem,从浏览器1获取也使用与用户名1相同的头像URL。所以我的问题是:为什么signalR可以传递正确的用户名但是它avatar url出了问题。 这是我的详细代码: 1.代码背后:
using System.Collections.Concurrent;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNet.SignalR;
namespace BIX
{
public class ChatHub : Hub
{
private static readonly ConcurrentDictionary<string, string> dic = new ConcurrentDictionary<string, string>();
public void Send(string name, string message)
{
Clients.All.broadcastMessage(name, message);
}
public void SendToSpecific(string name, string message, string to)
{
Clients.Caller.broadcastMessage(name, message);
Clients.Client(dic[to]).broadcastMessage(name, message);
}
public void Notify(string name, string id)
{
if (dic.ContainsKey(name))
{
Clients.Caller.differentName();
}
else
{
dic.TryAdd(name, id);
foreach (var entry in dic)
{
Clients.Caller.online(entry.Key);
}
Clients.Others.enters(name);
}
}
public override Task OnDisconnected(bool stopCalled)
{
var name = dic.FirstOrDefault(x => x.Value == Context.ConnectionId.ToString());
string s;
dic.TryRemove(name.Key, out s);
return Clients.All.disconnected(name.Key);
}
}
}
和:
using System;
using System.Web.UI;
using BIX.Business;
namespace BIX.Admins
{
public partial class Chat : Page
{
protected static string userName { get; set; }
protected static string userImage { get; set; }
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
getUserInfo();
}
}
private void getUserInfo()
{
if (string.IsNullOrEmpty((string)Session["UserId"]))
{
Response.Redirect("/Account/Logout.aspx");
}
else
{
userName = (string)Session["UserName"];
var userId = (string)Session["UserId"];
var listE = UsersService.Users_GetById(userId);
userImage = listE[0].UserImage;
}
}
}
}
2:HTML和JS
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Chat.aspx.cs" Inherits="BIX.Admins.Chat" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title></title>
<meta name="description" content="">
<link href="../App_Themes/Admin/css/FBLikeChat.css" rel="stylesheet"/>
<!-- chatjs requirements -->
<script src="../Scripts/jquery-2.1.4.min.js"></script>
<script src="../Scripts/jquery.signalR-2.2.0.min.js"></script>
<script src="/signalr/hubs"></script>
<script type="text/javascript">
$(function() {
startChatHub();
});
var nickname = "";
var avatarurl = "";
function startChatHub() {
var chat = $.connection.chatHub;
// Get the user name.
nickname = "<%= userName %>";
avatarurl = "<%= userImage %>";
chat.client.online = function(name) {
// Update list of users
if (name == nickname) {
$("#chat_body").append("<img src=" + avatarurl + " class=\"avatar\" /><div id=\"userlist\">" + name + "</div>");
$("#msg_head").append("<div id=userchat>" + name + "</div>");
} else {
$("#chat_body").append("<img src=" + avatarurl + " class=\"avatar\" /><div id=\"userlist\">" + name + "</div>");
$("#users").append("<option value=\"" + name + "\">" + name + "</option>");
}
};
chat.client.enters = function(name) {
$("#msg_body").append("<div ><i>" + name + " joins the conversation</i></div>");
$("#users").append("<option value=\"" + name + "\">" + name + "</option>");
//$("#chat_body").append("<div id=userlist>" + name + "</div>");
$("#chat_body").append("<img src=" + avatarurl + " class=\"avatar\" /><div id=\"userlist\">" + name + "</div>");
};
// Create a function that the hub can call to broadcast chat messages.
chat.client.broadcastMessage = function(name, message) {
//Interpret smileys
message = message.replace(":)", "<img src=\"/ChatJS/Images/Emoticons/smile-2.png\" class=\"smileys\" />");
message = message.replace(":D", "<img src=\"/ChatJS/Images/Emoticons/smile-1.png\" />");
message = message.replace(":o", "<img src=\"/ChatJS/Images/Emoticons/smile-6.png\" />");
//display the message
//$("#msg_body").append("<div class=\"border\"><span style=\"color:orange\">" + name + "</span>: " + message + "</div>");
$("#msg_body").append("<img src=" + avatarurl + " class=\"avatar\" />", message);
};
chat.client.disconnected = function(name) {
//Calls when someone leaves the page
$("#msg_body").append("<div ><i>" + name + " leaves the conversation</i></div>");
$("#chat_body div").remove(":contains('" + name + "')");
jQuery(this).attr("src", "data:image/gif;base64,R0lGODlhAQABAIAAAP///////yH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==");
$("#users option").remove(":contains('" + name + "')");
};
//scroll bar
$(".chat_head").click(function() {
$("#chat_body").slideToggle("slow");
});
$("#msg_head").click(function() {
$(".msg_wrap").slideToggle("slow");
});
$(".close").click(function() {
$(".msg_box").hide();
});
$("#userlist").click(function() {
$(".msg_wrap").show();
$(".msg_box").show();
});
// Start the connection.
$.connection.hub.start().done(function() {
//Calls the notify method of the server
chat.server.notify(nickname, $.connection.hub.id);
$("#messagebox").keypress(function(e) {
if (e.keyCode == 13) {
var msg = "<div id=msg_b>" + $("#messagebox").val() + "</div>";
$("#messagebox").val("");
if ($("#users").val() == "All") {
//Call the Send method on the hub.
chat.server.send(nickname, msg);
$("#msg_body").scrollTop($("#msg_body")[0].scrollHeight);
} else {
chat.server.sendToSpecific(nickname, msg, $("#users").val());
//Clear text box and reset focus for next comment.
$("#messagebox").val("").focus();
$("#msg_body").scrollTop($("#msg_body")[0].scrollHeight);
}
}
});
});
}
</script>
</head>
<body>
<!-- FBchat -->
<div id="chat_box">
<div class="chat_head"> Friends</div>
<div id="chat_body">
</div>
</div>
<div class="msg_box" style="right: 210px">
<div id="msg_head">
<div class="close" aria-hidden="true">x</div>
</div>
<div class="msg_wrap">
<div id="msg_body">
<div class="msg_push"></div>
</div>
<div class="msg_footer">
<div style="float: right">
<select id="users">
<option value="All">All</option>
</select>
</div>
<textarea id="messagebox" class="msg_input" placeholder="Type a message..."></textarea>
</div>
</div>
</div>
</body>
</html>
这是用于说明的图像: Chat window UI
答案 0 :(得分:1)
修改您的代码如下,希望它有效:
<script>
$(document).ready(function () {
$("#chat_body").slideToggle("slow");
$(".msg_wrap").slideToggle("slow");
});
$(function () {
startChatHub();
});
var nickname = "";
var avatarurl = "";
function startChatHub() {
var chat = $.connection.chatHub;
// Get the user name.
nickname = "<%= userName %>";
avatarurl = "<%= userImage %>";
chat.client.online = function (name) {
// Update list of users
if (name == nickname) {
$("#chat_body").append("<img src=" + avatarurl + " class=\"avatar\" /><div id=\"userlist\">" + name + "</div>");
$("#msg_head").append("<div id=userchat>" + name + "</div>");
} else {
$("#chat_body").append("<img src=\"../Images/user.jpg\" class=\"avatar\" /><div id=\"userlist\">" + name + "</div>");
$("#users").append("<option value=\"" + name + "\">" + name + "</option>");
}
};
chat.client.enters = function (name) {
$("#msg_body").append("<div ><i>" + name + " signs in</i></div>");
$("#users").append("<option value=\"" + name + "\">" + name + "</option>");
//$("#chat_body").append("<div id=userlist>" + name + "</div>");
$("#chat_body").append("<img src=\"../Images/user.jpg\" class=\"avatar\" /><div id=\"userlist\">" + name + "</div>");
};
// Create a function that the hub can call to broadcast chat messages.
chat.client.broadcastMessage = function (name, message) {
//Interpret smileys
message = message.replace(":)", "<img src=\"../Images/Emoticons/smile-2.png\" class=\"smileys\" />");
message = message.replace(":D", "<img src=\"../Images/Emoticons/smile-1.png\" />");
message = message.replace(":o", "<img src=\"../Images/Emoticons/smile-6.png\" />");
var currentdate = new Date();
var chattime = currentdate.getDate() + "/"
+ (currentdate.getMonth() + 1) + "/"
+ currentdate.getFullYear() + " @ "
+ currentdate.getHours() + ":"
+ currentdate.getMinutes() + ":"
+ currentdate.getSeconds();
//display the message
$("#msg_body").append("<div class=\"border\"><span style=\"color:orange\">" + name + "</span>: " + " <span class='msg-time'>" + chattime + "</span>" + "</div>" + message);
//$("#msg_body").append("<img src=" + avatarurl + " class=\"avatar\" />", message);
};
chat.client.disconnected = function (name) {
//Calls when someone leaves the page
$("#msg_body").append("<div ><i>" + name + " signs out</i></div>");
$("#chat_body div").remove(":contains('" + name + "')");
$("#users option").remove(":contains('" + name + "')");
};
//scroll bar
$(".chat_head").click(function () {
$("#chat_body").slideToggle("slow");
});
$("#msg_head").click(function () {
$(".msg_wrap").slideToggle("slow");
});
$(".close").click(function () {
$(".msg_box").hide();
});
$("#userlist").click(function () {
$(".msg_wrap").show();
$(".msg_box").show();
});
// Start the connection.
$.connection.hub.start().done(function () {
//Calls the notify method of the server
chat.server.notify(nickname, $.connection.hub.id);
$("#messagebox").keypress(function (e) {
if (e.keyCode == 13) {
var msg = "<div id=msg_b>" + $("#messagebox").val() + "</div>";
$("#messagebox").val("");
if ($("#users").val() == "All") {
//Call the Send method on the hub.
chat.server.send(nickname, msg);
$("#msg_body").scrollTop($("#msg_body")[0].scrollHeight);
} else {
chat.server.sendToSpecific(nickname, msg, $("#users").val());
//Clear text box and reset focus for next comment.
$("#messagebox").val("").focus();
$("#msg_body").scrollTop($("#msg_body")[0].scrollHeight);
}
}
});
});
}
</script>