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名稱
|
||
}
|
||
}
|
||
*/
|
||
|
||
|
||
|
||
} |