99 lines
3.3 KiB
C#
99 lines
3.3 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Web;
|
|
using Microsoft.AspNet.SignalR;
|
|
using System.Threading.Tasks;
|
|
using Microsoft.Owin;
|
|
|
|
|
|
public class signalRChat : Hub
|
|
{
|
|
// 呼叫所有使用者
|
|
//Clients.All.alertMessage(message);
|
|
// 呼叫除了自己的使用者
|
|
//Clients.Others.alertMessage(message);
|
|
// 呼叫所有使用者除了某個 ConnectionId 的使用者
|
|
//Clients.AllExcept(Context.ConnectionId).alertMessage(message);
|
|
// 呼叫自己
|
|
//Clients.Caller.alertMessage(message);
|
|
// 呼叫特定使用者
|
|
//Clients.Client(Context.ConnectionId).alertMessage(message);
|
|
// 呼叫群組使用者
|
|
//Clients.Group(groupId).alertMessage(message);
|
|
|
|
//宣告靜態類別,來儲存上線清單
|
|
public static class UserHandler
|
|
{
|
|
public static Dictionary<string, string> ConnectedIds = new Dictionary<string, string>();
|
|
}
|
|
//使用者連線時呼叫
|
|
public void userConnected(string name, string groupId)
|
|
{
|
|
//進行編碼,防止XSS攻擊
|
|
name = HttpUtility.HtmlEncode(name);
|
|
|
|
//新增目前使用者至上線清單
|
|
UserHandler.ConnectedIds.Add(Context.ConnectionId, name);
|
|
//新增使用者至群組
|
|
Groups.Add(Context.ConnectionId, groupId);
|
|
}
|
|
|
|
//當使用者斷線時呼叫
|
|
public override Task OnDisconnected(bool stopCalled)
|
|
{
|
|
//當使用者離開時,移除在清單內的 ConnectionId
|
|
Clients.All.removeList(Context.ConnectionId);
|
|
UserHandler.ConnectedIds.Remove(Context.ConnectionId);
|
|
return base.OnDisconnected(stopCalled);
|
|
}
|
|
|
|
//若要使用前端來發話通知才需要下面的程式,由後端發送請參考根目錄下的chat.aspx
|
|
/*
|
|
//發送訊息給所有人
|
|
public void sendAllMessage(string from, string message)
|
|
{
|
|
if (1==1) //這裡要驗證發話者(from)是否有權限發送
|
|
{
|
|
message = HttpUtility.HtmlEncode(message);
|
|
Clients.All.alertMessage(message); //alertMessage 為client端 function名稱
|
|
}
|
|
}
|
|
|
|
//發送訊息至特定使用者
|
|
public void sendMessage(string from, string connectId, string message)
|
|
{
|
|
if (1 == 1) //這裡要驗證發話者(from)是否有權限發送
|
|
{
|
|
message = HttpUtility.HtmlEncode(message);
|
|
Clients.Client(connectId).alertMessage(message); //alertMessage 為client端 function名稱
|
|
}
|
|
|
|
}
|
|
|
|
//發送訊息至特定使用者名稱
|
|
public void sendMessageByName(string from, string userName, string message)
|
|
{
|
|
if (1 == 1) //這裡要驗證發話者(from)是否有權限發送
|
|
{
|
|
message = HttpUtility.HtmlEncode(message);
|
|
var connectId = UserHandler.ConnectedIds.Where(p => p.Value == userName).FirstOrDefault().Key;
|
|
Clients.Client(connectId).alertMessage(message); //alertMessage 為client端 function名稱
|
|
}
|
|
}
|
|
|
|
|
|
//發送訊息至群組
|
|
public void sendGroupMessage(string from, string groupId, string message)
|
|
{
|
|
if (1 == 2) //這裡要驗證發話者(from)是否有權限發送
|
|
{
|
|
message = HttpUtility.HtmlEncode(message);
|
|
Clients.Group(groupId).alertMessage(message); //alertMessage 為client端 function名稱
|
|
}
|
|
}
|
|
*/
|
|
|
|
|
|
|
|
} |