Skip to content

Commit

Permalink
[fix] ZoneTcpClient
Browse files Browse the repository at this point in the history
  • Loading branch information
lkeme committed Apr 10, 2020
1 parent efc8ef8 commit 15bb434
Show file tree
Hide file tree
Showing 5 changed files with 130 additions and 33 deletions.
13 changes: 13 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,19 @@
# Release Notes
# 本项目Log

## v0.3.0.200410 alpha (2020-04-10)

### Added
-

### Changed
-

### Fixed
- 修复备用监控无法获取
- 修复获取分区ID异常
-

## v0.3.0.200404 alpha (2020-04-04)

### Added
Expand Down
50 changes: 25 additions & 25 deletions DOC.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
<p align="center"><img width="300px" src="https://i.loli.net/2018/04/20/5ad97bd395912.jpeg"></p>

<p align="center">
<img src="https://img.shields.io/badge/version-0.3.0.200404 alpha-green.svg?longCache=true&style=for-the-badge">
<img src="https://img.shields.io/badge/version-0.3.0.200410 alpha-green.svg?longCache=true&style=for-the-badge">
<img src="https://img.shields.io/badge/license-mit-blue.svg?longCache=true&style=for-the-badge">
</p>

Expand All @@ -15,30 +15,30 @@ B 站直播实用脚本

|plugin |version |description |
|--------------------|--------------------|--------------------|
|Login |20.04.04 |账号登录 |
|Schedule |20.04.04 |休眠控制 |
|MasterSite |20.04.04 |主站助手 |
|Daily |20.04.04 |每日礼包 |
|Heart |20.04.04 |双端心跳 |
|Task |20.04.04 |每日任务 |
|Silver |20.04.04 |银瓜子宝箱 |
|Barrage |20.04.04 |活跃弹幕 |
|Silver2Coin |20.04.04 |银瓜子换硬币 |
|GiftSend |20.04.04 |礼物赠送 |
|Judge |20.04.04 |风纪 |
|GroupSignIn |20.04.04 |友爱社签到 |
|ManGa |20.04.04 |漫画签到分享 |
|GiftHeart |20.04.04 |心跳礼物 |
|MaterialObject |20.04.04 |实物抽奖 |
|AloneTcpClient |20.04.04 |独立监控 |
|ZoneTcpClient |20.04.04 |分区监控 |
|StormRaffle |20.04.04 |节奏风暴 |
|GiftRaffle |20.04.04 |活动礼物 |
|PkRaffle |20.04.04 |大乱斗 |
|GuardRaffle |20.04.04 |舰长总督 |
|AnchorRaffle |20.04.04 |天选时刻 |
|AwardRecord |20.04.04 |获奖通知 |
|Statistics |20.04.04 |数据统计 |
|Login |20.04.10 |账号登录 |
|Schedule |20.04.10 |休眠控制 |
|MasterSite |20.04.10 |主站助手 |
|Daily |20.04.10 |每日礼包 |
|Heart |20.04.10 |双端心跳 |
|Task |20.04.10 |每日任务 |
|Silver |20.04.10 |银瓜子宝箱 |
|Barrage |20.04.10 |活跃弹幕 |
|Silver2Coin |20.04.10 |银瓜子换硬币 |
|GiftSend |20.04.10 |礼物赠送 |
|Judge |20.04.10 |风纪 |
|GroupSignIn |20.04.10 |友爱社签到 |
|ManGa |20.04.10 |漫画签到分享 |
|GiftHeart |20.04.10 |心跳礼物 |
|MaterialObject |20.04.10 |实物抽奖 |
|AloneTcpClient |20.04.10 |独立监控 |
|ZoneTcpClient |20.04.10 |分区监控 |
|StormRaffle |20.04.10 |节奏风暴 |
|GiftRaffle |20.04.10 |活动礼物 |
|PkRaffle |20.04.10 |大乱斗 |
|GuardRaffle |20.04.10 |舰长总督 |
|AnchorRaffle |20.04.10 |天选时刻 |
|AwardRecord |20.04.10 |获奖通知 |
|Statistics |20.04.10 |数据统计 |

## 打赏赞助

Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ Group: [55308141](https://jq.qq.com/?_wv=1027&k=5AIDaJg) | **仅用于BUG提交

## 公告

Currently for Personal Edition **0.3.0.200404 alpha**
Currently for Personal Edition **0.3.0.200410 alpha**

## 文档

Expand Down
31 changes: 30 additions & 1 deletion src/plugin/Live.php
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ public static function areaToRid($area_id): array
$raw = Curl::get('other', $url, $payload);
$de_raw = json_decode($raw, true);
// 防止异常
if (!isset($de_raw['data']) || $de_raw['code']) {
if (!isset($de_raw['data']) || $de_raw['code'] || count($de_raw['data']) == 0) {
Log::warning("获取直播分区异常: " . $de_raw['msg']);
$area_info = [
'area_id' => $area_id,
Expand Down Expand Up @@ -142,6 +142,35 @@ public static function getRoomInfo($room_id): array
return json_decode($raw, true);
}

/**
* @use 获取直播间弹幕信息
* @param $room_id
* @return array
*/
public static function getDanMuConf($room_id): array
{
$url = 'https://api.live.bilibili.com/room/v1/Danmu/getConf';
$payload = [
'room_id' => $room_id,
'platform' => 'pc',
'player' => 'web'
];
$raw = Curl::get('other', $url, $payload);
return json_decode($raw, true);
}


/**
* @use 获取弹幕信息Token
* @param $room_id
* @return string
*/
public static function getDanMuToken($room_id): string
{
$data = self::getDanMuConf($room_id);
return $data['data']['token'];
}


/**
* @use web端获取直播间信息
Expand Down
67 changes: 61 additions & 6 deletions src/plugin/ZoneTcpClient.php
Original file line number Diff line number Diff line change
Expand Up @@ -149,6 +149,9 @@ private static function update(array $area_info)
*/
private static function analyJson($data = '', $assoc = true)
{
if (is_array($data)) {
return $data;
}
$data = json_decode($data, $assoc);
if (($data && is_object($data)) || (is_array($data) && !empty($data))) {
return $data;
Expand Down Expand Up @@ -183,6 +186,24 @@ private static function onMessage($msg, $type)
}
$data = [];
switch ($de_raw['cmd']) {
case 'TV_START':
// 小电视
break;
case 'RAFFLE_START':
// 活动礼物
break;
case 'LOTTERY_START':
// 抽奖
break;
case 'PK_LOTTERY_START':
// 乱斗
break;
case 'GUARD_LOTTERY_START':
// 舰长
break;
case 'ALL_MSG':
// 未知
break;
case 'NOTICE_MSG':
$msg_type = $de_raw['msg_type'];
$msg_self = $de_raw['msg_self'];
Expand Down Expand Up @@ -311,8 +332,13 @@ private static function genHeartBeatPkg(): string
private static function genHandshakePkg($room_id): string
{
return self::packMsg(json_encode([
'uid' => mt_rand(1000000, 2999999),
'roomid' => intval($room_id),
"uid" => 0,
"roomid" => intval($room_id),
"protover" => 2,
"platform" => "web",
"clientver" => "1.10.6",
"type" => 2,
"key" => Live::getDanMuToken($room_id)
]), 0x0007);
}

Expand All @@ -336,8 +362,10 @@ private static function packMsg($value, $option)
*/
private static function unPackMsg($value)
{
$res = unpack('Npacklen/nheadlen/nver/Nop/Nseq', $value);
return $res;
if (strlen($value) < 4) exit();
$head = unpack('Npacklen/nheadlen/nver/Nop/Nseq', $value);
// Log::info(json_encode($head, true));
return $head;
}


Expand Down Expand Up @@ -448,9 +476,36 @@ private static function receive()
if (!$len_body)
continue;
$body = self::reader($len_body);
if ($body)
self::onMessage($body, $type);
if ($body) {
if ($head['ver'] == 2) {
$data_list = self::v2_split($body, $len_body);
foreach ($data_list as $body) {
self::onMessage($body, $type);
}
} else {
self::onMessage($body, $type);
}
}
}
}

private static function v2_split($bin, $total)
{
$list = [];
$step = 0;
$data = gzuncompress($bin);
$total = strlen($data);
while (true) {
if ($step > 65535) exit();
if ($step == $total) break;
$bin = substr($data, $step, 16);
$head = self::unPackMsg($bin);
$length = isset($head['packlen']) ? $head['packlen'] : 16;
$body = substr($data, $step + 16, $length - 16);
$step += $length;
array_push($list, $body);
}
return $list;
}

/*
Expand Down

0 comments on commit 15bb434

Please sign in to comment.