javascript - SignalR Group 消息应用程序,创建组消息框导致刷新
问题描述
我正在使用 SignalR 创建一个聊天应用程序,我知道我的代码导致会话刷新,但是我看不到它是在哪里导致的。每当我点击我的提交输入标签时,它都会像私人聊天一样完成创建聊天框的步骤(有效)。但是,它不会调用服务器的 sendGroupMessage 方法来发送聊天。一旦它脱离了 javascript 端的 createGroupChatWindow 函数,它将刷新并断开用户连接。
关于为什么会发生这种情况的任何建议或关于我应该正确做什么的指示?如果代码难以阅读,我深表歉意。PS 我正在使用数据库来存储用户及其 ConnectionID。
编辑:运行应用程序时我没有收到任何错误。它只是导致在脚本完成时调用 onDisconnected。当我检查它是基于服务器还是基于客户端的断开连接时,它告诉我客户端启动了断开连接。
C# 聊天中心:
public void createGroupID(string GroupName, int OwnerID)
{
Groups.Add(Context.ConnectionId, GroupName);
string query = "INSERT INTO dbo.Collective (GroupName, GroupOwnerID) Select '" + GroupName + "','" + OwnerID + "'";
ConnC.ExecuteQuery(query);
}
public void getGroupID(string GroupName, string members)
{
string query = "Select * From dbo.Collective Where GroupName = '" + GroupName + "'";
int ID = 0;
int.TryParse(ConnC.GetColumnVal(query, "GroupID"), out ID);
int mem;
int.TryParse(members, out mem);
mapMembers(mem, ID, GroupName);
}
public void mapMembers(int members, int groupid, string groupName)
{
var item = "";
if (DisconnectUsers.Count(x => x.UserID == members) == 0)
{
List<Borg> memberConnection = ConnectedUsers.Where(u => u.UserID == members).ToList();
item = memberConnection.Select(u => u.ConnectionId).ToString();
Groups.Add(item, groupName);
//Clients.Group(item, groupName);
}
else
{
List<Borg> memberConnection = DisconnectUsers.Where(u => u.UserID == members).ToList();
item = memberConnection.Select(u => u.ConnectionId).ToString();
Groups.Add(item, groupName);
//Clients.Group(item, groupName);
}
if (members != 0)
{
string query = "Insert Into dbo.CollectiveMapping (GroupID, MemberID) Select '" + groupid + "'," + members;
ConnC.ExecuteQuery(query);
}
}
public void sendGroupMessage(string GroupName, string message)
{
try
{
string strfromUserId = (ConnectedUsers.Where(u => u.ConnectionId == Context.ConnectionId).Select(u => u.UserID).FirstOrDefault()).ToString();
int _fromUserId = 0;
int.TryParse(strfromUserId, out _fromUserId);
string getgroupid = "Select * From dbo.Collective where GroupName = '" + GroupName + "'";
int groupid = 0;
int.TryParse(ConnC.GetColumnVal(getgroupid, "GroupID"), out groupid);
string countMember = "Select * From dbo.CollectiveMapping Where GroupID = " + groupid + " and MemberID <> " + _fromUserId;
List <GroupMapping> GroupMap = ConnC.getGroupMappings(countMember);
List<Borg> FromUsers = ConnectedUsers.Where(u => u.UserID == _fromUserId).ToList();
List<Borg> ToGroup = (List<Borg>)ConnectedUsers.Where(u => GroupMap.Any(m => m.UserID == u.UserID));
var UName = Context.User.Identity.Name;
var item = ConnectedUsers.FirstOrDefault(x => x.ConnectionId == Context.ConnectionId);
if (FromUsers.Count != 0 && ToGroup.Count() != 0)
{
foreach (var ToUser in ToGroup)
{
// send to
//Chat Title
Clients.Group(GroupName).addMessage(FromUsers[0].UserName, message);
//Clients.Group(GroupName).sendGroupMessage(GroupName, FromUsers[0].UserName, GroupName, message);
//Clients.Client(ToUser.ConnectionId).sendPrivateMessage(GroupName, FromUsers[0].UserName, GroupName, message);
}
foreach (var FromUser in FromUsers)
{
// send to caller user
//Chat Title
Clients.Group(GroupName).addMessage(FromUsers[0].UserName, message);
//Clients.Group(GroupName).sendGroupMessage(GroupName, FromUsers[0].UserName, GroupName, message);
//Clients.Client(FromUser.ConnectionId).sendPrivateMessage(GroupName, FromUsers[0].UserName, GroupName, message);
}
// send to caller user
//Clients.Caller.sendPrivateMessage(_toUserId.ToString(), FromUsers[0].UserName, message);
//ChatDB.Instance.SaveChatHistory(_fromUserId, _toUserId, message);
Messages _MessageDetail = new Messages { FromUserID = _fromUserId, FromUserName = FromUsers[0].UserName, UserID = groupid, UserName = GroupName, Message = message };
var TUserName = GroupName;
var FUserName = FromUsers[0].UserName;
string Query = "Insert Into dbo.HiveMessages (FromUserID, FromUserName,GroupID, UserName, Message, TimeSent) Select '" + _fromUserId + "','" + FUserName + "','" + groupid + "','" + GroupName + "','" + message + "', GetDate()";
ConnC.ExecuteQuery(Query);
AddMessageinCache(_MessageDetail);
}
}
catch { }
}
Javascript:
$("#submit").click(function () {
var t = $("#groupname").val();
var i = $("[id$=hidCurrentID]").val();
e.server.createGroupID(t, i);
//var g = e.server.getGroupID(t).val();
OpenGroupChatWindow(e,i,t);
}),
function createGroupChatWindow(e, i, t, n, s) {
s = "Welcome to the start of your Group.",
n = $("[id$=hidCurrentUser]").val(),
$("#chatd").append('<div id="' + t + '"></div>'),
$('#user-list :selected').each(function (i, selectedelement) {
var mem = $(selectedelement).val();
//var mem = members[i].val();
e.server.getGroupID(t, mem);
o = $('<a id="' + i + '" class="col-sm-12 bg-succ" >' + t + "<a>"),
$(o).dblclick(function () { var i = $(this).attr("id"); a != i && OpenGroupChatWindow(e, i, t) });
$("#group").append(o);
$("#" + t).chatbox({
id: t,
title: t,
user: mem,
offset: getNextOffset(),
width: 200,
messageSent: function (t, n, s) {
e.server.sendGroupMessage(t, s),
TypingFlag = !0
},
boxClosed: function (e) {
$("#" + e).remove();
var i = showList.indexOf(e);
if (-1 != i) {
showList.splice(i, 1), diff = config.width + config.gap;
for (var t = i; t < showList.length; t++)
offset = $("#" + showList[t]).chatbox("option", "offset"), $("#" + showList[t])
.chatbox("option", "offset", offset - diff)
}
}
});
});
$("#" + t).siblings().css("position", "relative"),
$("#" + t).siblings().append('<div id="typing_' + i + '" style="width:20px; height:20px; display:none; position:absolute; right:14px; top:8px"><img height="20" src="' + srp + 'images/pencil.gif" /></div>'),
$("#" + t).siblings().find("textarea").on("input", function (t) { 1 == TypingFlag && e.server.sendUserTypingRequest(i), TypingFlag = !1 });
var a = parseInt($("[id$=hidCurrentID]").val()), o = i;// e.server.requestLastMessage(a, o)
}
HTML:
<div id="chat-window">
<div id="popup-title-bar" style="bottom:0; width: 200px;">
<span class="col-sm-9 txt-primary" style="color: white;">
<strong>Online Members</strong>
</span>
<div id="min-button">
<i>±</i>
</div>
</div>
<div id="popup-box" style="display: none; overflow-y:auto;">
<div id="on" style="display: block; overflow-y:auto;">
<span>-Online Users-</span>
</div>
<div id="group">
<a id ="new-group" class="col-sm-12 bg-succ">-New Group-</a>
</div>
<div id="off">
<span>-Offline Users-</span>
</div>
</div>
</div>
<div id="group-control" style="display: none;">
<div id="group-title-bar">
<span class="col-sm-9 txt-primary" style="color: white; width: 375px;">
<strong>Create A New Group</strong>
</span>
<div id="close-group-control" style="font: 25px; right: 0px;">❌</div>
</div>
<div class="group-input">
<div id="group-name" style="float:left;">
<label for="groupname" style="display:block">
<strong>Name your Group</strong>
</label>
<textarea placeholder="-Group Name Here-" id="groupname" name="groupname" maxlength="50" style="display: block; resize: none;width: 200px; height:35px; border:3px solid #428bca; padding:4px; font-family:'Times New Roman';"></textarea>
</div>
<div id="submit-group" style="float:right;text-align:center;">
<label for="submit" style="display:block; right:0px; width:200px; height:35px; text-align:center;" >
<strong>Create Group</strong>
</label>
<input id="submit" style="display:block; right:0px; width:200px; height:35px; text-align:center;" type="submit" name="submit" value="Submit" />
</div>
<div id="group-choose" style="display:block;">
<input type="text" placeholder="Search.." style="display:block; width:200px; height:35px;" id="chosenUser" onkeyup="filterFunction()">
<select style="display: block;" multiple="multiple" id="user-list" class="dropdown-content" name="user-list">
<option value="" selected style="width:200px; height:35px;">-Select your Group Members-</option>
</select>
</div>
</div>
</div>
解决方案
推荐阅读
- java - java - 如何使用secp256r1椭圆曲线密钥对在java中执行加密和解密?
- wso2 - WSO2 VFS FTP 代理动态创建
- amazon-web-services - 有没有办法在夜间触发 cloudwatch 警报时忽略它们?
- nginx - Lua body_data() 返回 nil 虽然请求正文不为空
- python - 使用 Pandas 修改 Excel 文件,布局更改最少
- c# - 将 Target Framework 切换到 Xamarin.Mac Full .NET Framework >= 4.6.1 使 Xamarin.Forms.Platform.MacOS 消失
- php - 如何在单个字符串中解码多个 json 对象?
- javascript - 有没有办法在 Mapbox GL JS 的 z 轴上按类型对所有自定义图层进行排序?
- html - 拒绝加载图像 'https://res.cloudinary.com/.. violngecurity Policy directive: "img-src 'self' data:"
- python - 从字符串中动态删除子字符串