正在查看: 95爱播免登录版 v3.1.9 应用的 PacketWriter.java JAVA 源代码文件
本页面展示 JAVA 反编译生成的源代码文件,支持语法高亮显示。 仅供安全研究与技术分析使用,严禁用于任何非法用途。请遵守相关法律法规。
正在查看: 95爱播免登录版 v3.1.9 应用的 PacketWriter.java JAVA 源代码文件
本页面展示 JAVA 反编译生成的源代码文件,支持语法高亮显示。 仅供安全研究与技术分析使用,严禁用于任何非法用途。请遵守相关法律法规。
package org.jivesoftware.smack;
import java.io.IOException;
import java.io.Writer;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;
import org.jivesoftware.smack.packet.Packet;
class PacketWriter {
private XMPPConnection connection;
volatile boolean done;
private Thread keepAliveThread;
private final BlockingQueue<Packet> queue = new ArrayBlockingQueue(500, true);
private Writer writer;
private Thread writerThread;
protected PacketWriter(XMPPConnection xMPPConnection) {
this.connection = xMPPConnection;
init();
}
private Packet nextPacket() {
Packet packet = null;
while (!this.done && (packet = this.queue.poll()) == null) {
try {
synchronized (this.queue) {
this.queue.wait();
}
} catch (InterruptedException unused) {
}
}
return packet;
}
public void writePackets(Thread thread) {
try {
openStream();
while (!this.done && this.writerThread == thread) {
Packet nextPacket = nextPacket();
if (nextPacket != null) {
this.writer.write(nextPacket.toXML());
if (this.queue.isEmpty()) {
this.writer.flush();
}
}
}
while (!this.queue.isEmpty()) {
try {
this.writer.write(this.queue.remove().toXML());
} catch (Exception e2) {
e2.printStackTrace();
}
}
this.writer.flush();
this.queue.clear();
try {
this.writer.write("</stream:stream>");
this.writer.flush();
} catch (Exception unused) {
} catch (Throwable th) {
try {
this.writer.close();
} catch (Exception unused2) {
}
throw th;
}
try {
this.writer.close();
} catch (Exception unused3) {
}
} catch (IOException e3) {
if (this.done || this.connection.isSocketClosed()) {
return;
}
this.done = true;
XMPPConnection xMPPConnection = this.connection;
if (xMPPConnection.packetReader != null) {
xMPPConnection.notifyConnectionError(e3);
}
}
}
void cleanup() {
this.connection.interceptors.clear();
this.connection.sendListeners.clear();
}
protected void init() {
this.writer = this.connection.writer;
this.done = false;
Thread thread = new Thread() {
@Override
public void run() {
PacketWriter.this.writePackets(this);
}
};
this.writerThread = thread;
thread.setName("Smack Packet Writer (" + this.connection.connectionCounterValue + ")");
this.writerThread.setDaemon(true);
}
void openStream() throws IOException {
this.writer.write("<stream:stream to=\"" + this.connection.getServiceName() + "\" xmlns=\"jabber:client\" xmlns:stream=\"http://etherx.jabber.org/streams\" version=\"1.0\">");
this.writer.flush();
}
public void sendPacket(Packet packet) {
if (this.done) {
return;
}
this.connection.firePacketInterceptors(packet);
try {
this.queue.put(packet);
synchronized (this.queue) {
this.queue.notifyAll();
}
this.connection.firePacketSendingListeners(packet);
} catch (InterruptedException e2) {
e2.printStackTrace();
}
}
void setWriter(Writer writer) {
this.writer = writer;
}
public void shutdown() {
this.done = true;
synchronized (this.queue) {
this.queue.notifyAll();
}
Thread thread = this.keepAliveThread;
if (thread != null) {
thread.interrupt();
}
}
public void startup() {
this.writerThread.start();
}
}