",2)[0]);
-
- String _sign;
- String _roomid;
- String _rid;
- String _ts;
-
- int errno = jsonObject1.getInt("errno");
- if (errno != 0) {
- System.out.println("-----------------------");
- System.out.println("第一步获取数据出错,程序将退出");
- System.out.println("url:" + url1);
- System.out.println("json数据:");
- System.out.println(jsonObject1);
- System.out.println("-----------------------");
+ String url = "https://riven.panda.tv/chatroom/getinfo?roomid=" + roomId + "&app=1&_caller=panda-pc_web&_=" + System.currentTimeMillis();
+ Document document;
+ try {
+ document = Jsoup.connect(url).get();
+ LOGGER.info("从[" + url + "]获取登录弹幕服务器的必要信息");
+ LOGGER.info("登录数据Json串:" + document.body().text());
+ } catch (IOException e) {
+ LOGGER.error("获取登录服务器的必要数据出错", e);
return false;
- } else {
- JSONObject j = jsonObject1.getJSONObject("data");
- _sign = j.getString("sign");
- _roomid = String.valueOf(j.getLong("roomid"));
- _rid = String.valueOf(j.getLong("rid"));
- _ts = String.valueOf(j.getLong("ts"));
}
-
- String url2 = "http://api.homer.panda.tv/chatroom/getinfo?rid=" + _rid + "&roomid=" + _roomid + "&retry=0&sign=" + _sign + "&ts=" + _ts + "&_=" + System.currentTimeMillis();
- Document doc2 = Jsoup.connect(url2).header("User-Agent","Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.86 Safari/537.36").ignoreContentType(true).get();
- JSONObject jsonObject2 = new JSONObject(doc2.toString().split("",2)[1].split("",2)[0]);
-
- errno = jsonObject2.getInt("errno");
- if (errno != 0) {
- System.out.println("-----------------------");
- System.out.println("第二步获取数据出错,程序将退出");
- System.out.println("url:" + url2);
- System.out.println("json数据:");
- System.out.println(jsonObject2);
- System.out.println("-----------------------");
- return false;
+ JSONObject jsonObject = JSON.parseObject(document.body().text());
+
+ int errno = jsonObject.getInteger("errno");
+ if (errno == 0) {
+ JSONObject tempJsonObject = jsonObject.getJSONObject("data");
+ rid = String.valueOf(tempJsonObject.getLong("rid"));
+ appid = tempJsonObject.getString("appid");
+ ts = String.valueOf(tempJsonObject.getLong("ts"));
+ sign = tempJsonObject.getString("sign");
+ authType = tempJsonObject.getString("authType");
+
+ JSONArray chatAddressList = tempJsonObject.getJSONArray("chat_addr_list");
+ LOGGER.info("弹幕服务器数据:" + chatAddressList);
+ //选第一个服务器登录
+ serverIp = chatAddressList.getString(0).split(":",2)[0];
+ port = Integer.parseInt(chatAddressList.getString(0).split(":", 2)[1]);
} else {
- JSONObject j = jsonObject2.getJSONObject("data");
- rid = String.valueOf(j.getLong("rid"));
- appid = j.getString("appid");
- ts = String.valueOf(j.getLong("ts"));
- sign = j.getString("sign");
- authType = j.getString("authType");
-
- JSONArray chat_addr_list = j.getJSONArray("chat_addr_list");
- for (Object o:chat_addr_list) {
- serverIp = ((String) o).split(":",2)[0];
- port = Integer.valueOf(((String) o).split(":", 2)[1]);
- break;
- }
+ LOGGER.error("获取登录弹幕服务器的必要信息出错,程序将退出");
+ return false;
}
return true;
@@ -101,12 +76,12 @@ public boolean init() throws IOException {
/**
* 与弹幕服务器取得联系,相当于登录弹幕服务器
*/
- public void login() throws IOException {
+ private void login() throws IOException {
socket = new Socket(serverIp,port);
- System.out.println("登录弹幕服务器:" + serverIp + ":" + port);
+ LOGGER.info("登录弹幕服务器:" + serverIp + ":" + port + "成功");
String msg = "u:" + rid + "@" + appid + "\n" +
- "k:" + k + "\n" +
- "t:" + t + "\n" +
+ "k:1\n" +
+ "t:300\n" +
"ts:" + ts + "\n" +
"sign:" + sign + "\n" +
"authtype:" + authType;
@@ -128,47 +103,48 @@ public void run() {
OutputStream outputStream;
try {
- //初始化失败
if (!init()) {
return;
}
login();
- System.out.println("----------------------------");
-
messageHandler = new MessageHandler(socket);
outputStream = socket.getOutputStream();
-
long start = System.currentTimeMillis();
while (true) {
- List