NioClient.smali
.class public final Lcom/open/net/client/impl/tcp/nio/NioClient;
.super Lcom/open/net/client/structures/BaseClient;
.source "NioClient.java"
# instance fields
.field private mConnector:Lcom/open/net/client/impl/tcp/nio/NioConnector;
.field private mReadByteBuffer:Ljava/nio/ByteBuffer;
.field private mSocketChannel:Ljava/nio/channels/SocketChannel;
.field private mWriteByteBuffer:Ljava/nio/ByteBuffer;
# direct methods
.method static constructor <clinit>()V
.registers 0
.line 23
invoke-static {}, Lcom/open/net/client/GClient;->init()V
return-void
.end method
.method public constructor <init>(Lcom/open/net/client/structures/BaseMessageProcessor;Lcom/open/net/client/structures/IConnectListener;)V
.registers 4
.line 30
invoke-direct {p0, p1}, Lcom/open/net/client/structures/BaseClient;-><init>(Lcom/open/net/client/structures/BaseMessageProcessor;)V
const/high16 p1, 0x10000
.line 61
invoke-static {p1}, Ljava/nio/ByteBuffer;->allocate(I)Ljava/nio/ByteBuffer;
move-result-object v0
iput-object v0, p0, Lcom/open/net/client/impl/tcp/nio/NioClient;->mReadByteBuffer:Ljava/nio/ByteBuffer;
.line 62
invoke-static {p1}, Ljava/nio/ByteBuffer;->allocate(I)Ljava/nio/ByteBuffer;
move-result-object p1
iput-object p1, p0, Lcom/open/net/client/impl/tcp/nio/NioClient;->mWriteByteBuffer:Ljava/nio/ByteBuffer;
.line 31
new-instance p1, Lcom/open/net/client/impl/tcp/nio/NioConnector;
invoke-direct {p1, p0, p2}, Lcom/open/net/client/impl/tcp/nio/NioConnector;-><init>(Lcom/open/net/client/impl/tcp/nio/NioClient;Lcom/open/net/client/structures/IConnectListener;)V
iput-object p1, p0, Lcom/open/net/client/impl/tcp/nio/NioClient;->mConnector:Lcom/open/net/client/impl/tcp/nio/NioConnector;
return-void
.end method
# virtual methods
.method public connect()V
.registers 2
.line 44
iget-object v0, p0, Lcom/open/net/client/impl/tcp/nio/NioClient;->mConnector:Lcom/open/net/client/impl/tcp/nio/NioConnector;
invoke-virtual {v0}, Lcom/open/net/client/impl/tcp/nio/NioConnector;->connect()V
return-void
.end method
.method public disconnect()V
.registers 2
.line 48
iget-object v0, p0, Lcom/open/net/client/impl/tcp/nio/NioClient;->mConnector:Lcom/open/net/client/impl/tcp/nio/NioConnector;
invoke-virtual {v0}, Lcom/open/net/client/impl/tcp/nio/NioConnector;->disconnect()V
return-void
.end method
.method public init(Ljava/nio/channels/SocketChannel;)V
.registers 2
.line 65
iput-object p1, p0, Lcom/open/net/client/impl/tcp/nio/NioClient;->mSocketChannel:Ljava/nio/channels/SocketChannel;
return-void
.end method
.method public isConnected()Z
.registers 2
.line 56
iget-object v0, p0, Lcom/open/net/client/impl/tcp/nio/NioClient;->mConnector:Lcom/open/net/client/impl/tcp/nio/NioConnector;
invoke-virtual {v0}, Lcom/open/net/client/impl/tcp/nio/NioConnector;->isConnected()Z
move-result v0
return v0
.end method
.method public onCheckConnect()V
.registers 2
.line 70
iget-object v0, p0, Lcom/open/net/client/impl/tcp/nio/NioClient;->mConnector:Lcom/open/net/client/impl/tcp/nio/NioConnector;
invoke-virtual {v0}, Lcom/open/net/client/impl/tcp/nio/NioConnector;->checkConnect()V
return-void
.end method
.method public onClose()V
.registers 2
const/4 v0, 0x0
.line 75
iput-object v0, p0, Lcom/open/net/client/impl/tcp/nio/NioClient;->mSocketChannel:Ljava/nio/channels/SocketChannel;
return-void
.end method
.method public onRead()Z
.registers 6
const/4 v0, 0x0
.line 81
:try_start_1
iget-object v1, p0, Lcom/open/net/client/impl/tcp/nio/NioClient;->mReadByteBuffer:Ljava/nio/ByteBuffer;
invoke-virtual {v1}, Ljava/nio/ByteBuffer;->clear()Ljava/nio/Buffer;
move v1, v0
.line 85
:goto_7
iget-object v2, p0, Lcom/open/net/client/impl/tcp/nio/NioClient;->mSocketChannel:Ljava/nio/channels/SocketChannel;
iget-object v3, p0, Lcom/open/net/client/impl/tcp/nio/NioClient;->mReadByteBuffer:Ljava/nio/ByteBuffer;
invoke-virtual {v2, v3}, Ljava/nio/channels/SocketChannel;->read(Ljava/nio/ByteBuffer;)I
move-result v2
const/4 v3, -0x1
if-ne v2, v3, :cond_14
move v1, v0
goto :goto_45
:cond_14
add-int/2addr v1, v2
.line 92
iget-object v3, p0, Lcom/open/net/client/impl/tcp/nio/NioClient;->mReadByteBuffer:Ljava/nio/ByteBuffer;
invoke-virtual {v3}, Ljava/nio/ByteBuffer;->capacity()I
move-result v3
if-ne v1, v3, :cond_41
.line 93
iget-object v1, p0, Lcom/open/net/client/impl/tcp/nio/NioClient;->mReadByteBuffer:Ljava/nio/ByteBuffer;
invoke-virtual {v1}, Ljava/nio/ByteBuffer;->flip()Ljava/nio/Buffer;
.line 94
iget-object v1, p0, Lcom/open/net/client/impl/tcp/nio/NioClient;->mReadByteBuffer:Ljava/nio/ByteBuffer;
invoke-virtual {v1}, Ljava/nio/ByteBuffer;->remaining()I
move-result v1
if-lez v1, :cond_3b
.line 95
iget-object v1, p0, Lcom/open/net/client/impl/tcp/nio/NioClient;->mMessageProcessor:Lcom/open/net/client/structures/BaseMessageProcessor;
iget-object v3, p0, Lcom/open/net/client/impl/tcp/nio/NioClient;->mReadByteBuffer:Ljava/nio/ByteBuffer;
invoke-virtual {v3}, Ljava/nio/ByteBuffer;->array()[B
move-result-object v3
iget-object v4, p0, Lcom/open/net/client/impl/tcp/nio/NioClient;->mReadByteBuffer:Ljava/nio/ByteBuffer;
invoke-virtual {v4}, Ljava/nio/ByteBuffer;->remaining()I
move-result v4
invoke-virtual {v1, p0, v3, v0, v4}, Lcom/open/net/client/structures/BaseMessageProcessor;->onReceiveData(Lcom/open/net/client/structures/BaseClient;[BII)V
.line 97
:cond_3b
iget-object v1, p0, Lcom/open/net/client/impl/tcp/nio/NioClient;->mReadByteBuffer:Ljava/nio/ByteBuffer;
invoke-virtual {v1}, Ljava/nio/ByteBuffer;->clear()Ljava/nio/Buffer;
move v1, v0
:cond_41
if-lez v2, :cond_44
goto :goto_7
:cond_44
const/4 v1, 0x1
.line 108
:goto_45
iget-object v2, p0, Lcom/open/net/client/impl/tcp/nio/NioClient;->mReadByteBuffer:Ljava/nio/ByteBuffer;
invoke-virtual {v2}, Ljava/nio/ByteBuffer;->flip()Ljava/nio/Buffer;
.line 109
iget-object v2, p0, Lcom/open/net/client/impl/tcp/nio/NioClient;->mReadByteBuffer:Ljava/nio/ByteBuffer;
invoke-virtual {v2}, Ljava/nio/ByteBuffer;->remaining()I
move-result v2
if-lez v2, :cond_63
.line 110
iget-object v2, p0, Lcom/open/net/client/impl/tcp/nio/NioClient;->mMessageProcessor:Lcom/open/net/client/structures/BaseMessageProcessor;
iget-object v3, p0, Lcom/open/net/client/impl/tcp/nio/NioClient;->mReadByteBuffer:Ljava/nio/ByteBuffer;
invoke-virtual {v3}, Ljava/nio/ByteBuffer;->array()[B
move-result-object v3
iget-object v4, p0, Lcom/open/net/client/impl/tcp/nio/NioClient;->mReadByteBuffer:Ljava/nio/ByteBuffer;
invoke-virtual {v4}, Ljava/nio/ByteBuffer;->remaining()I
move-result v4
invoke-virtual {v2, p0, v3, v0, v4}, Lcom/open/net/client/structures/BaseMessageProcessor;->onReceiveData(Lcom/open/net/client/structures/BaseClient;[BII)V
.line 112
:cond_63
iget-object v2, p0, Lcom/open/net/client/impl/tcp/nio/NioClient;->mReadByteBuffer:Ljava/nio/ByteBuffer;
invoke-virtual {v2}, Ljava/nio/ByteBuffer;->clear()Ljava/nio/Buffer;
:try_end_68
.catch Ljava/lang/Exception; {:try_start_1 .. :try_end_68} :catch_6a
move v0, v1
goto :goto_6e
:catch_6a
move-exception v1
.line 115
invoke-virtual {v1}, Ljava/lang/Exception;->printStackTrace()V
.line 119
:goto_6e
iget-object v1, p0, Lcom/open/net/client/impl/tcp/nio/NioClient;->mMessageProcessor:Lcom/open/net/client/structures/BaseMessageProcessor;
if-eqz v1, :cond_77
.line 120
iget-object v1, p0, Lcom/open/net/client/impl/tcp/nio/NioClient;->mMessageProcessor:Lcom/open/net/client/structures/BaseMessageProcessor;
invoke-virtual {v1, p0}, Lcom/open/net/client/structures/BaseMessageProcessor;->onReceiveDataCompleted(Lcom/open/net/client/structures/BaseClient;)V
:cond_77
if-nez v0, :cond_87
.line 124
invoke-virtual {p0}, Lcom/open/net/client/impl/tcp/nio/NioClient;->pollWriteMessage()Lcom/open/net/client/structures/message/Message;
move-result-object v1
:goto_7d
if-eqz v1, :cond_87
.line 126
invoke-virtual {p0, v1}, Lcom/open/net/client/impl/tcp/nio/NioClient;->removeWriteMessage(Lcom/open/net/client/structures/message/Message;)V
.line 127
invoke-virtual {p0}, Lcom/open/net/client/impl/tcp/nio/NioClient;->pollWriteMessage()Lcom/open/net/client/structures/message/Message;
move-result-object v1
goto :goto_7d
:cond_87
return v0
.end method
.method public onWrite()Z
.registers 8
.line 135
invoke-virtual {p0}, Lcom/open/net/client/impl/tcp/nio/NioClient;->pollWriteMessage()Lcom/open/net/client/structures/message/Message;
move-result-object v0
:goto_4
const/4 v1, 0x0
if-eqz v0, :cond_93
.line 139
:try_start_7
iget-object v2, p0, Lcom/open/net/client/impl/tcp/nio/NioClient;->mWriteByteBuffer:Ljava/nio/ByteBuffer;
invoke-virtual {v2}, Ljava/nio/ByteBuffer;->capacity()I
move-result v2
iget v3, v0, Lcom/open/net/client/structures/message/Message;->length:I
if-ge v2, v3, :cond_55
.line 142
iget v2, v0, Lcom/open/net/client/structures/message/Message;->length:I
move v3, v1
.line 147
:cond_14
iget-object v4, p0, Lcom/open/net/client/impl/tcp/nio/NioClient;->mWriteByteBuffer:Ljava/nio/ByteBuffer;
invoke-virtual {v4}, Ljava/nio/ByteBuffer;->capacity()I
move-result v4
if-le v2, v4, :cond_23
iget-object v4, p0, Lcom/open/net/client/impl/tcp/nio/NioClient;->mWriteByteBuffer:Ljava/nio/ByteBuffer;
invoke-virtual {v4}, Ljava/nio/ByteBuffer;->capacity()I
move-result v4
goto :goto_24
:cond_23
move v4, v2
.line 148
:goto_24
iget-object v5, p0, Lcom/open/net/client/impl/tcp/nio/NioClient;->mWriteByteBuffer:Ljava/nio/ByteBuffer;
iget-object v6, v0, Lcom/open/net/client/structures/message/Message;->data:[B
invoke-virtual {v5, v6, v3, v4}, Ljava/nio/ByteBuffer;->put([BII)Ljava/nio/ByteBuffer;
.line 149
iget-object v5, p0, Lcom/open/net/client/impl/tcp/nio/NioClient;->mWriteByteBuffer:Ljava/nio/ByteBuffer;
invoke-virtual {v5}, Ljava/nio/ByteBuffer;->flip()Ljava/nio/Buffer;
add-int/2addr v3, v4
sub-int/2addr v2, v4
.line 153
iget-object v4, p0, Lcom/open/net/client/impl/tcp/nio/NioClient;->mSocketChannel:Ljava/nio/channels/SocketChannel;
iget-object v5, p0, Lcom/open/net/client/impl/tcp/nio/NioClient;->mWriteByteBuffer:Ljava/nio/ByteBuffer;
invoke-virtual {v4, v5}, Ljava/nio/channels/SocketChannel;->write(Ljava/nio/ByteBuffer;)I
move-result v4
:goto_3a
if-lez v4, :cond_4d
.line 156
iget-object v4, p0, Lcom/open/net/client/impl/tcp/nio/NioClient;->mWriteByteBuffer:Ljava/nio/ByteBuffer;
invoke-virtual {v4}, Ljava/nio/ByteBuffer;->hasRemaining()Z
move-result v4
if-eqz v4, :cond_4d
.line 157
iget-object v4, p0, Lcom/open/net/client/impl/tcp/nio/NioClient;->mSocketChannel:Ljava/nio/channels/SocketChannel;
iget-object v5, p0, Lcom/open/net/client/impl/tcp/nio/NioClient;->mWriteByteBuffer:Ljava/nio/ByteBuffer;
invoke-virtual {v4, v5}, Ljava/nio/channels/SocketChannel;->write(Ljava/nio/ByteBuffer;)I
move-result v4
goto :goto_3a
.line 160
:cond_4d
iget-object v4, p0, Lcom/open/net/client/impl/tcp/nio/NioClient;->mWriteByteBuffer:Ljava/nio/ByteBuffer;
invoke-virtual {v4}, Ljava/nio/ByteBuffer;->clear()Ljava/nio/Buffer;
if-gtz v2, :cond_14
goto :goto_85
.line 167
:cond_55
iget-object v2, p0, Lcom/open/net/client/impl/tcp/nio/NioClient;->mWriteByteBuffer:Ljava/nio/ByteBuffer;
iget-object v3, v0, Lcom/open/net/client/structures/message/Message;->data:[B
iget v4, v0, Lcom/open/net/client/structures/message/Message;->offset:I
iget v5, v0, Lcom/open/net/client/structures/message/Message;->length:I
invoke-virtual {v2, v3, v4, v5}, Ljava/nio/ByteBuffer;->put([BII)Ljava/nio/ByteBuffer;
.line 168
iget-object v2, p0, Lcom/open/net/client/impl/tcp/nio/NioClient;->mWriteByteBuffer:Ljava/nio/ByteBuffer;
invoke-virtual {v2}, Ljava/nio/ByteBuffer;->flip()Ljava/nio/Buffer;
.line 170
iget-object v2, p0, Lcom/open/net/client/impl/tcp/nio/NioClient;->mSocketChannel:Ljava/nio/channels/SocketChannel;
iget-object v3, p0, Lcom/open/net/client/impl/tcp/nio/NioClient;->mWriteByteBuffer:Ljava/nio/ByteBuffer;
invoke-virtual {v2, v3}, Ljava/nio/channels/SocketChannel;->write(Ljava/nio/ByteBuffer;)I
move-result v2
:goto_6d
if-lez v2, :cond_80
.line 173
iget-object v2, p0, Lcom/open/net/client/impl/tcp/nio/NioClient;->mWriteByteBuffer:Ljava/nio/ByteBuffer;
invoke-virtual {v2}, Ljava/nio/ByteBuffer;->hasRemaining()Z
move-result v2
if-eqz v2, :cond_80
.line 174
iget-object v2, p0, Lcom/open/net/client/impl/tcp/nio/NioClient;->mSocketChannel:Ljava/nio/channels/SocketChannel;
iget-object v3, p0, Lcom/open/net/client/impl/tcp/nio/NioClient;->mWriteByteBuffer:Ljava/nio/ByteBuffer;
invoke-virtual {v2, v3}, Ljava/nio/channels/SocketChannel;->write(Ljava/nio/ByteBuffer;)I
move-result v2
goto :goto_6d
.line 177
:cond_80
iget-object v2, p0, Lcom/open/net/client/impl/tcp/nio/NioClient;->mWriteByteBuffer:Ljava/nio/ByteBuffer;
invoke-virtual {v2}, Ljava/nio/ByteBuffer;->clear()Ljava/nio/Buffer;
.line 180
:goto_85
invoke-virtual {p0, v0}, Lcom/open/net/client/impl/tcp/nio/NioClient;->removeWriteMessage(Lcom/open/net/client/structures/message/Message;)V
.line 181
invoke-virtual {p0}, Lcom/open/net/client/impl/tcp/nio/NioClient;->pollWriteMessage()Lcom/open/net/client/structures/message/Message;
move-result-object v0
:try_end_8c
.catch Ljava/io/IOException; {:try_start_7 .. :try_end_8c} :catch_8e
goto/16 :goto_4
:catch_8e
move-exception v2
.line 185
invoke-virtual {v2}, Ljava/io/IOException;->printStackTrace()V
goto :goto_94
:cond_93
const/4 v1, 0x1
:goto_94
if-nez v1, :cond_a9
if-eqz v0, :cond_9b
.line 192
invoke-virtual {p0, v0}, Lcom/open/net/client/impl/tcp/nio/NioClient;->removeWriteMessage(Lcom/open/net/client/structures/message/Message;)V
.line 194
:cond_9b
invoke-virtual {p0}, Lcom/open/net/client/impl/tcp/nio/NioClient;->pollWriteMessage()Lcom/open/net/client/structures/message/Message;
move-result-object v0
:goto_9f
if-eqz v0, :cond_a9
.line 196
invoke-virtual {p0, v0}, Lcom/open/net/client/impl/tcp/nio/NioClient;->removeWriteMessage(Lcom/open/net/client/structures/message/Message;)V
.line 197
invoke-virtual {p0}, Lcom/open/net/client/impl/tcp/nio/NioClient;->pollWriteMessage()Lcom/open/net/client/structures/message/Message;
move-result-object v0
goto :goto_9f
:cond_a9
return v1
.end method
.method public reconnect()V
.registers 2
.line 52
iget-object v0, p0, Lcom/open/net/client/impl/tcp/nio/NioClient;->mConnector:Lcom/open/net/client/impl/tcp/nio/NioConnector;
invoke-virtual {v0}, Lcom/open/net/client/impl/tcp/nio/NioConnector;->reconnect()V
return-void
.end method
.method public setConnectAddress([Lcom/open/net/client/structures/TcpAddress;)V
.registers 3
.line 36
iget-object v0, p0, Lcom/open/net/client/impl/tcp/nio/NioClient;->mConnector:Lcom/open/net/client/impl/tcp/nio/NioConnector;
invoke-virtual {v0, p1}, Lcom/open/net/client/impl/tcp/nio/NioConnector;->setConnectAddress([Lcom/open/net/client/structures/TcpAddress;)V
return-void
.end method
.method public setConnectTimeout(J)V
.registers 4
.line 40
iget-object v0, p0, Lcom/open/net/client/impl/tcp/nio/NioClient;->mConnector:Lcom/open/net/client/impl/tcp/nio/NioConnector;
invoke-virtual {v0, p1, p2}, Lcom/open/net/client/impl/tcp/nio/NioConnector;->setConnectTimeout(J)V
return-void
.end method