添加 @Nonnull 注解和一些工具方法扩增

This commit is contained in:
czp 2018-02-11 17:22:05 +08:00
parent 6720bf3798
commit 91fd0d23b9
6 changed files with 120 additions and 34 deletions

View File

@ -13,15 +13,7 @@
# 添加依赖
## Gradle
compile group: 'com.hiczp', name: 'bilibili-api', version: '0.0.3'
## Maven
<dependency>
<groupId>com.hiczp</groupId>
<artifactId>bilibili-api</artifactId>
<version>0.0.3</version>
</dependency>
compile group: 'com.hiczp', name: 'bilibili-api', version: '0.0.4'
# 名词解释
B站不少参数都是瞎取的, 并且不统一, 经常混用, 以下给出一些常见参数对应的含义

View File

@ -0,0 +1,5 @@
package com.hiczp.bilibili.api.live.bulletScreen;
public class BulletScreenConstDefinition {
public static final int DEFAULT_MESSAGE_LENGTH_LIMIT = 20;
}

View File

@ -0,0 +1,17 @@
package com.hiczp.bilibili.api.live.bulletScreen;
import javax.annotation.Nonnull;
public class BulletScreenHelper {
public static String[] splitMessageByFixedLength(@Nonnull String message, int lengthLimit) {
int count = message.length() / lengthLimit;
if (message.length() % lengthLimit != 0) {
count++;
}
String[] messages = new String[count];
for (int i = 0; i < count; i++) {
messages[i] = message.substring(i * lengthLimit, i != count - 1 ? (i + 1) * lengthLimit : message.length());
}
return messages;
}
}

View File

@ -0,0 +1,10 @@
package com.hiczp.bilibili.api.live.bulletScreen;
import com.hiczp.bilibili.api.live.entity.BulletScreenEntity;
import com.hiczp.bilibili.api.live.entity.SendBulletScreenResponseEntity;
public interface BulletScreenSendingCallback {
void onResponse(BulletScreenEntity bulletScreenEntity, SendBulletScreenResponseEntity sendBulletScreenResponseEntity);
void onFailure(BulletScreenEntity bulletScreenEntity, Throwable throwable);
}

View File

@ -0,0 +1,28 @@
package com.hiczp.bilibili.api.live.bulletScreen;
import com.hiczp.bilibili.api.BilibiliServiceProvider;
import com.hiczp.bilibili.api.live.entity.BulletScreenEntity;
public class BulletScreenSendingTask {
private BilibiliServiceProvider bilibiliServiceProvider;
private BulletScreenEntity bulletScreenEntity;
private BulletScreenSendingCallback bulletScreenSendingCallback;
public BulletScreenSendingTask(BilibiliServiceProvider bilibiliServiceProvider, BulletScreenEntity bulletScreenEntity, BulletScreenSendingCallback bulletScreenSendingCallback) {
this.bilibiliServiceProvider = bilibiliServiceProvider;
this.bulletScreenEntity = bulletScreenEntity;
this.bulletScreenSendingCallback = bulletScreenSendingCallback;
}
public BilibiliServiceProvider getBilibiliServiceProvider() {
return bilibiliServiceProvider;
}
public BulletScreenEntity getBulletScreenEntity() {
return bulletScreenEntity;
}
public BulletScreenSendingCallback getBulletScreenSendingCallback() {
return bulletScreenSendingCallback;
}
}

View File

@ -3,6 +3,7 @@ package com.hiczp.bilibili.api.live.socket;
import com.google.common.eventbus.EventBus;
import com.google.common.eventbus.Subscribe;
import com.hiczp.bilibili.api.BilibiliServiceProvider;
import com.hiczp.bilibili.api.live.bulletScreen.BulletScreenConstDefinition;
import com.hiczp.bilibili.api.live.entity.BulletScreenEntity;
import com.hiczp.bilibili.api.live.entity.LiveRoomInfoEntity;
import com.hiczp.bilibili.api.live.entity.SendBulletScreenResponseEntity;
@ -22,6 +23,7 @@ import io.netty.handler.timeout.IdleStateHandler;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.annotation.Nonnull;
import java.io.Closeable;
import java.io.IOException;
import java.util.Optional;
@ -29,7 +31,7 @@ import java.util.Optional;
public class LiveClient implements Closeable {
private static final Logger LOGGER = LoggerFactory.getLogger(LiveClient.class);
private final EventBus eventBus = new EventBus("BilibiliLiveClient");
private final EventBus eventBus = new EventBus("BilibiliLiveClientEventBus");
private final BilibiliServiceProvider bilibiliServiceProvider;
private final long showRoomId;
private final long userId;
@ -43,20 +45,28 @@ public class LiveClient implements Closeable {
eventBus.register(new ConnectionCloseListener());
}
public LiveClient(BilibiliServiceProvider bilibiliServiceProvider, long showRoomId) {
public LiveClient(@Nonnull BilibiliServiceProvider bilibiliServiceProvider, long showRoomId) {
this.bilibiliServiceProvider = bilibiliServiceProvider;
this.showRoomId = showRoomId;
this.userId = 0;
initEventBus();
}
public LiveClient(BilibiliServiceProvider bilibiliServiceProvider, long showRoomId, long userId) {
public LiveClient(@Nonnull BilibiliServiceProvider bilibiliServiceProvider, long showRoomId, long userId) {
this.bilibiliServiceProvider = bilibiliServiceProvider;
this.showRoomId = showRoomId;
this.userId = userId;
initEventBus();
}
public LiveRoomInfoEntity.LiveRoomEntity fetchRoomInfo() throws IOException {
return bilibiliServiceProvider.getLiveService()
.getRoomInfo(showRoomId)
.execute()
.body()
.getData();
}
public synchronized LiveClient connect() throws IOException {
if (channel != null && channel.isActive()) {
LOGGER.warn("Already connected to server, connect method can not be invoked twice");
@ -68,11 +78,7 @@ public class LiveClient implements Closeable {
}
LOGGER.info("Fetching info of live room {}", showRoomId);
liveRoomEntity = bilibiliServiceProvider.getLiveService()
.getRoomInfo(showRoomId)
.execute()
.body()
.getData();
liveRoomEntity = fetchRoomInfo();
long roomId = liveRoomEntity.getRoomId();
LOGGER.info("Get actual room id {}", roomId);
@ -141,36 +147,49 @@ public class LiveClient implements Closeable {
return eventBus;
}
public LiveClient registerListener(Object object) {
public LiveClient registerListener(@Nonnull Object object) {
eventBus.register(object);
return this;
}
public LiveClient unregisterListeners(Object object) {
public LiveClient unregisterListeners(@Nonnull Object object) {
eventBus.unregister(object);
return this;
}
public SendBulletScreenResponseEntity sendBulletScreen(String message) throws IOException {
return sendBulletScreen(
new BulletScreenEntity(
liveRoomEntity != null ? liveRoomEntity.getRoomId() : showRoomId,
userId,
message
)
);
}
public SendBulletScreenResponseEntity sendBulletScreen(BulletScreenEntity bulletScreenEntity) throws IOException {
public SendBulletScreenResponseEntity sendBulletScreen(@Nonnull String message) throws IOException {
return bilibiliServiceProvider.getLiveService()
.sendBulletScreen(bulletScreenEntity)
.sendBulletScreen(createBulletScreenEntity(message))
.execute()
.body();
}
//TODO 弹幕发送队列
public void sendBulletScreenInBlockingQueue(String message) {
throw new UnsupportedOperationException();
// public void sendBulletScreenAsync(@Nonnull String message, @Nonnull BulletScreenSendingCallback bulletScreenSendingCallback, boolean autoSplit) {
// if (!autoSplit) {
// sendBulletScreenAsync(message, bulletScreenSendingCallback);
// } else {
// for (String s : BulletScreenHelper.splitMessageByFixedLength(message, getBulletScreenLengthLimitOrDefaultLengthLimit())) {
// sendBulletScreenAsync(s, bulletScreenSendingCallback);
// }
// }
// }
//
// public void sendBulletScreenAsync(@Nonnull String message, @Nonnull BulletScreenSendingCallback bulletScreenSendingCallback) {
// BulletScreenSendingDequeHolder.addTask(
// new BulletScreenSendingTask(
// bilibiliServiceProvider,
// createBulletScreenEntity(message),
// bulletScreenSendingCallback
// )
// );
// }
private BulletScreenEntity createBulletScreenEntity(String message) {
return new BulletScreenEntity(
getRoomIdOrShowRoomId(),
userId,
message
);
}
public long getShowRoomId() {
@ -182,6 +201,21 @@ public class LiveClient implements Closeable {
}
public Optional<LiveRoomInfoEntity.LiveRoomEntity> getRoomInfo() {
if (liveRoomEntity == null) {
try {
liveRoomEntity = fetchRoomInfo();
} catch (IOException e) {
e.printStackTrace();
}
}
return Optional.of(liveRoomEntity);
}
public long getRoomIdOrShowRoomId() {
return getRoomInfo().map(LiveRoomInfoEntity.LiveRoomEntity::getRoomId).orElse(showRoomId);
}
public int getBulletScreenLengthLimitOrDefaultLengthLimit() {
return getRoomInfo().map(LiveRoomInfoEntity.LiveRoomEntity::getMsgLength).orElse(BulletScreenConstDefinition.DEFAULT_MESSAGE_LENGTH_LIMIT);
}
}