新增直播间统计,粉丝团 消息;添加弹幕输出

This commit is contained in:
小白猿
2022-11-05 16:38:08 +08:00
parent 9508442bd1
commit e3233e14fe
3 changed files with 118 additions and 4 deletions
+50 -1
View File
@@ -10,7 +10,19 @@
点赞,
进入直播间,
关注主播,
送礼
送礼,
直播间统计,
粉丝团信息
}
/// <summary>
/// 粉丝团消息类型
/// </summary>
public enum FansclubType
{
无 = 0,
粉丝团升级 = 1,
加入粉丝团 = 2
}
/// <summary>
@@ -128,4 +140,41 @@
/// </summary>
public long Count { get; set; }
}
/// <summary>
/// 直播间统计消息
/// </summary>
public class UserSeqMsg : Msg
{
/// <summary>
/// 当前直播间用户数量
/// </summary>
public long OnlineUserCount { get; set; }
/// <summary>
/// 累计直播间用户数量
/// </summary>
public long TotalUserCount { get; set; }
/// <summary>
/// 累计直播间用户数量 显示文本
/// </summary>
public string TotalUserCountStr { get; set; }
/// <summary>
/// 当前直播间用户数量 显示文本
/// </summary>
public string OnlineUserCountStr { get; set; }
}
/// <summary>
/// 粉丝团消息
/// </summary>
public class FansclubMsg : Msg
{
/// <summary>
/// 粉丝团消息类型,升级1,加入2
/// </summary>
public int Type { get; set; }
}
}
+8
View File
@@ -123,30 +123,35 @@ namespace BarrageGrab
{
switch (msg.Method)
{
//来了
case "WebcastMemberMessage":
{
var arg = Serializer.Deserialize<MemberMessage>(new ReadOnlyMemory<byte>(msg.Payload));
this.OnMemberMessage?.Invoke(this, arg);
break;
}
//关注
case "WebcastSocialMessage":
{
var arg = Serializer.Deserialize<SocialMessage>(new ReadOnlyMemory<byte>(msg.Payload));
this.OnSocialMessage?.Invoke(this, arg);
break;
}
//消息
case "WebcastChatMessage":
{
var arg = Serializer.Deserialize<ChatMessage>(new ReadOnlyMemory<byte>(msg.Payload));
this.OnChatMessage?.Invoke(this, arg);
break;
}
//点赞
case "WebcastLikeMessage":
{
var arg = Serializer.Deserialize<LikeMessage>(new ReadOnlyMemory<byte>(msg.Payload));
this.OnLikeMessage?.Invoke(this, arg);
break;
}
//礼物
case "WebcastGiftMessage":
{
var arg = Serializer.Deserialize<GiftMessage>(new ReadOnlyMemory<byte>(msg.Payload));
@@ -189,18 +194,21 @@ namespace BarrageGrab
this.OnGiftMessage?.Invoke(this, arg);
break;
}
//直播间统计
case "WebcastRoomUserSeqMessage":
{
var arg = Serializer.Deserialize<RoomUserSeqMessage>(new ReadOnlyMemory<byte>(msg.Payload));
this.OnRoomUserSeqMessage?.Invoke(this, arg);
break;
}
//直播间状态变更
case "WebcastControlMessage":
{
var arg = Serializer.Deserialize<ControlMessage>(new ReadOnlyMemory<byte>(msg.Payload));
this.OnControlMessage?.Invoke(this, arg);
break;
}
//粉丝团消息
case "WebcastFansclubMessage":
{
var arg = Serializer.Deserialize<FansclubMessage>(new ReadOnlyMemory<byte>(msg.Payload));
+60 -3
View File
@@ -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}]";
}
/// <summary>