From e3233e14fe7a7533ea51e4b5d241dc0028614d20 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E7=99=BD=E7=8C=BF?= <1083092844@qq.com> Date: Sat, 5 Nov 2022 16:38:08 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E7=9B=B4=E6=92=AD=E9=97=B4?= =?UTF-8?q?=E7=BB=9F=E8=AE=A1,=E7=B2=89=E4=B8=9D=E5=9B=A2=20=E6=B6=88?= =?UTF-8?q?=E6=81=AF;=E6=B7=BB=E5=8A=A0=E5=BC=B9=E5=B9=95=E8=BE=93?= =?UTF-8?q?=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BarrageGrab/JsonEntity/BarrageMessages.cs | 51 +++++++++++++++++- BarrageGrab/WssBarrageGrab.cs | 8 +++ BarrageGrab/WssBarrageService.cs | 63 +++++++++++++++++++++-- 3 files changed, 118 insertions(+), 4 deletions(-) diff --git a/BarrageGrab/JsonEntity/BarrageMessages.cs b/BarrageGrab/JsonEntity/BarrageMessages.cs index 324b96b..a324db3 100644 --- a/BarrageGrab/JsonEntity/BarrageMessages.cs +++ b/BarrageGrab/JsonEntity/BarrageMessages.cs @@ -10,7 +10,19 @@ 点赞, 进入直播间, 关注主播, - 送礼 + 送礼, + 直播间统计, + 粉丝团信息 + } + + /// + /// 粉丝团消息类型 + /// + public enum FansclubType + { + 无 = 0, + 粉丝团升级 = 1, + 加入粉丝团 = 2 } /// @@ -128,4 +140,41 @@ /// public long Count { get; set; } } + + /// + /// 直播间统计消息 + /// + public class UserSeqMsg : Msg + { + /// + /// 当前直播间用户数量 + /// + public long OnlineUserCount { get; set; } + + /// + /// 累计直播间用户数量 + /// + public long TotalUserCount { get; set; } + + /// + /// 累计直播间用户数量 显示文本 + /// + public string TotalUserCountStr { get; set; } + + /// + /// 当前直播间用户数量 显示文本 + /// + public string OnlineUserCountStr { get; set; } + } + + /// + /// 粉丝团消息 + /// + public class FansclubMsg : Msg + { + /// + /// 粉丝团消息类型,升级1,加入2 + /// + public int Type { get; set; } + } } \ No newline at end of file diff --git a/BarrageGrab/WssBarrageGrab.cs b/BarrageGrab/WssBarrageGrab.cs index 677e9a5..872306e 100644 --- a/BarrageGrab/WssBarrageGrab.cs +++ b/BarrageGrab/WssBarrageGrab.cs @@ -123,30 +123,35 @@ namespace BarrageGrab { switch (msg.Method) { + //来了 case "WebcastMemberMessage": { var arg = Serializer.Deserialize(new ReadOnlyMemory(msg.Payload)); this.OnMemberMessage?.Invoke(this, arg); break; } + //关注 case "WebcastSocialMessage": { var arg = Serializer.Deserialize(new ReadOnlyMemory(msg.Payload)); this.OnSocialMessage?.Invoke(this, arg); break; } + //消息 case "WebcastChatMessage": { var arg = Serializer.Deserialize(new ReadOnlyMemory(msg.Payload)); this.OnChatMessage?.Invoke(this, arg); break; } + //点赞 case "WebcastLikeMessage": { var arg = Serializer.Deserialize(new ReadOnlyMemory(msg.Payload)); this.OnLikeMessage?.Invoke(this, arg); break; } + //礼物 case "WebcastGiftMessage": { var arg = Serializer.Deserialize(new ReadOnlyMemory(msg.Payload)); @@ -189,18 +194,21 @@ namespace BarrageGrab this.OnGiftMessage?.Invoke(this, arg); break; } + //直播间统计 case "WebcastRoomUserSeqMessage": { var arg = Serializer.Deserialize(new ReadOnlyMemory(msg.Payload)); this.OnRoomUserSeqMessage?.Invoke(this, arg); break; } + //直播间状态变更 case "WebcastControlMessage": { var arg = Serializer.Deserialize(new ReadOnlyMemory(msg.Payload)); this.OnControlMessage?.Invoke(this, arg); break; } + //粉丝团消息 case "WebcastFansclubMessage": { var arg = Serializer.Deserialize(new ReadOnlyMemory(msg.Payload)); diff --git a/BarrageGrab/WssBarrageService.cs b/BarrageGrab/WssBarrageService.cs index e76ccb1..9922555 100644 --- a/BarrageGrab/WssBarrageService.cs +++ b/BarrageGrab/WssBarrageService.cs @@ -23,6 +23,7 @@ namespace BarrageGrab ConsoleWriter console = new ConsoleWriter(); WssBarrageGrab grab = new WssBarrageGrab(); Appsetting Appsetting = Appsetting.Get(); + int printCount = 0; public WssBarrageService() { @@ -36,6 +37,9 @@ namespace BarrageGrab this.grab.OnMemberMessage += Grab_OnMemberMessage; this.grab.OnSocialMessage += Grab_OnSocialMessage; this.grab.OnGiftMessage += Grab_OnGiftMessage; + this.grab.OnRoomUserSeqMessage += Grab_OnRoomUserSeqMessage; + this.grab.OnFansclubMessage += Grab_OnFansclubMessage; ; + //this.grab.OnControlMessage += Grab_OnControlMessage; this.socketServer = socket; //dieout.Start(); @@ -54,6 +58,39 @@ namespace BarrageGrab return user; } + private void Grab_OnFansclubMessage(object sender, ProtoEntity.FansclubMessage e) + { + var enty = new FansclubMsg() + { + Content = e.Content, + RoomId = e.commonInfo.roomId, + Type = e.Type, + User = GetUser(e) + }; + Print($"[粉丝团消息] " + enty.Content, ConsoleColor.Blue); + var pack = new BarrageMsgPack(JsonConvert.SerializeObject(enty), BarrageMsgType.粉丝团信息); + var json = JsonConvert.SerializeObject(pack); + this.Broadcast(json); + } + + private void Grab_OnRoomUserSeqMessage(object sender, ProtoEntity.RoomUserSeqMessage e) + { + var enty = new UserSeqMsg() + { + OnlineUserCount = e.Total, + TotalUserCount = e.totalUser, + TotalUserCountStr = e.totalPvForAnchor, + OnlineUserCountStr = e.onlineUserForAnchor, + RoomId = e.Common.roomId, + Content = $"当前直播间人数 {e.onlineUserForAnchor},累计直播间人数 {e.totalPvForAnchor}", + User = null + }; + Print($"[直播间统计] " + enty.Content, ConsoleColor.Magenta); + var pack = new BarrageMsgPack(JsonConvert.SerializeObject(enty), BarrageMsgType.直播间统计); + var json = JsonConvert.SerializeObject(pack); + this.Broadcast(json); + } + private void Grab_OnGiftMessage(object sender, ProtoEntity.GiftMessage e) { var enty = new GiftMsg() @@ -66,6 +103,7 @@ namespace BarrageGrab GiftName = e.Gift.Name, User = GetUser(e) }; + Print($"[礼物消息] " + enty.Content, ConsoleColor.Red); var pack = new BarrageMsgPack(JsonConvert.SerializeObject(enty), BarrageMsgType.送礼); var json = JsonConvert.SerializeObject(pack); this.Broadcast(json); @@ -75,10 +113,11 @@ namespace BarrageGrab { var enty = new Msg() { - Content = e.Common.Describe, + Content = $"{e.User.Nickname} 关注了主播", RoomId = e.Common.roomId, User = GetUser(e) }; + Print("[关注消息] " + enty.Content, ConsoleColor.Yellow); var pack = new BarrageMsgPack(JsonConvert.SerializeObject(enty), BarrageMsgType.关注主播); var json = JsonConvert.SerializeObject(pack); this.Broadcast(json); @@ -88,10 +127,11 @@ namespace BarrageGrab { var enty = new Msg() { - Content = e.Common.Describe, + Content = $"{e.User.Nickname} 来了", RoomId = e.Common.roomId, User = GetUser(e) }; + Print("[进直播间] " + enty.Content, ConsoleColor.Green); var pack = new BarrageMsgPack(JsonConvert.SerializeObject(enty), BarrageMsgType.进入直播间); var json = JsonConvert.SerializeObject(pack); this.Broadcast(json); @@ -102,10 +142,11 @@ namespace BarrageGrab var enty = new LikeMsg() { Count = e.Count, - Content = e.Common.Describe, + Content = $"{e.User.Nickname} 为主播点了{e.Count}个赞", RoomId = e.Common.roomId, User = GetUser(e) }; + Print("[点赞消息] " + enty.Content, ConsoleColor.Cyan); var pack = new BarrageMsgPack(JsonConvert.SerializeObject(enty), BarrageMsgType.点赞); var json = JsonConvert.SerializeObject(pack); this.Broadcast(json); @@ -119,11 +160,26 @@ namespace BarrageGrab RoomId = e.Common.roomId, User = GetUser(e) }; + Print($"[弹幕消息] {enty.User.Nickname}: {enty.Content}", ConsoleColor.White); var pack = new BarrageMsgPack(JsonConvert.SerializeObject(enty), BarrageMsgType.消息); var json = JsonConvert.SerializeObject(pack); this.Broadcast(json); } + private void Print(string msg, ConsoleColor color) + { + if (Appsetting.PrintBarrage) + { + console.WriteLine($"{DateTime.Now.ToString("HH:mm:ss")} " + msg + "\n", color); + if (++printCount > 99999) + { + printCount = 0; + Console.Clear(); + Console.WriteLine("已执行清理"); + } + } + } + private void Dieout_Elapsed(object sender, ElapsedEventArgs e) { var now = DateTime.Now; @@ -176,6 +232,7 @@ namespace BarrageGrab this.grab.Start(); //启动代理 this.socketServer.Start(Listen);//启动监听 console.WriteLine($"{this.socketServer.Location} 弹幕服务已启动...", ConsoleColor.Green); + Console.Title = $"抖音弹幕监听推送 [{this.socketServer.Location}]"; } ///