簡單聊天室
使用持久鏈接類我們就可以做一些即時通訊的應用了,我使用Group做了一個簡單的聊天室,先上圖技術細節下面再講
可以加入聊天室、創建聊天室、發送消息,下面就說說我是如何通過Group做出來的
持久鏈接類有一個Groups的對象,通過這個對象,我們可以進行分組添加人員、發送消息、刪除人員等操作
在連接事件中,給當前游客指定隨機名稱,並且返回當前已有的聊天室信息
protected override Task OnConnected(IRequest request, string connectionId) { var outPut = new OutPut { ResultType = "RoomList", Data = RoomList, UserName = $"游客{Rdom.Next(1, 999)}" }; //返回房間信息 return Connection.Send(connectionId, JsonConvert.SerializeObject(outPut)); }
下面的代碼做了剩下所有的處理,先從創建聊天室開始講起,如果客戶端的請求Action是createRoom那么當前操作就是創建聊天室,聊天室id是一個隨機生成的Guid,並且把當前的游客添加到當前聊天室中
加入聊天室也是非常簡單的,使用 Groups.Add方法可以輕松的做到,然后再進行廣播給當前聊天室中的所有人推送有新的游客加入
發送消息則是最簡單的了,可以看到最后的發送消息最后一個參數 connectionid,因為是當前人去發送消息 所以把當前人排除掉,給聊天室里的其他所有人發送
protected override Task OnReceived(IRequest request, string connectionId, string data) { var dto = JsonConvert.DeserializeObject<GroupDto>(data); var outPut = new OutPut { ResultType = "msgResult", Data = $"{dto.UserName} : {dto.Data}", CurrentRoomId = dto.RoomId }; if (dto.Action.Equals("jionUs")) { //加入聊天室 Groups.Add(connectionId, dto.RoomId); outPut.Data = $"歡迎{dto.UserName}加入{dto.RoomName}聊天室"; outPut.CurrentRoomId = dto.RoomId; Connection.Send(connectionId, JsonConvert.SerializeObject(outPut)); return Groups.Send(dto.RoomId, JsonConvert.SerializeObject(outPut)); } if (dto.Action.Equals("createRoom")) { //創建聊天室 var room = new Group() { RoomId = Guid.NewGuid().ToString(), RoomName = dto.RoomName }; Groups.Add(connectionId, room.RoomId); dto.RoomId = room.RoomId; RoomList.Add(room); //返回聊天室列表 outPut.ResultType = "RoomList"; outPut.Data = RoomList; outPut.CurrentRoomId = dto.RoomId; //發送消息 return Connection.Send(connectionId, JsonConvert.SerializeObject(outPut)); } //發送消息 return Groups.Send(dto.RoomId, JsonConvert.SerializeObject(outPut), connectionId); }