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}]";
}
///