f.smali
.class public final Lsg/bigo/sdk/network/c/f;
.super Ljava/lang/Object;
.source "SourceFile"
# interfaces
.implements Ljava/lang/Runnable;
# static fields
.field private static final c:Lsg/bigo/sdk/network/c/f;
# instance fields
.field private volatile a:Ljava/lang/Thread;
.field private volatile b:Z
.field private volatile d:Ljava/nio/channels/Selector;
.field private final e:Ljava/util/concurrent/locks/ReentrantLock;
# direct methods
.method static constructor <clinit>()V
.registers 1
.line 28
new-instance v0, Lsg/bigo/sdk/network/c/f;
invoke-direct {v0}, Lsg/bigo/sdk/network/c/f;-><init>()V
sput-object v0, Lsg/bigo/sdk/network/c/f;->c:Lsg/bigo/sdk/network/c/f;
return-void
.end method
.method public constructor <init>()V
.registers 2
.line 20
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
.line 88
new-instance v0, Ljava/util/concurrent/locks/ReentrantLock;
invoke-direct {v0}, Ljava/util/concurrent/locks/ReentrantLock;-><init>()V
iput-object v0, p0, Lsg/bigo/sdk/network/c/f;->e:Ljava/util/concurrent/locks/ReentrantLock;
return-void
.end method
.method public static a()Lsg/bigo/sdk/network/c/f;
.registers 1
.line 31
sget-object v0, Lsg/bigo/sdk/network/c/f;->c:Lsg/bigo/sdk/network/c/f;
return-object v0
.end method
.method private declared-synchronized c()V
.registers 4
monitor-enter p0
.line 35
:try_start_1
iget-object v0, p0, Lsg/bigo/sdk/network/c/f;->a:Ljava/lang/Thread;
:try_end_3
.catchall {:try_start_1 .. :try_end_3} :catchall_34
if-eqz v0, :cond_7
.line 36
monitor-exit p0
return-void
.line 39
:cond_7
:try_start_7
invoke-static {}, Ljava/nio/channels/Selector;->open()Ljava/nio/channels/Selector;
move-result-object v0
iput-object v0, p0, Lsg/bigo/sdk/network/c/f;->d:Ljava/nio/channels/Selector;
:try_end_d
.catch Ljava/lang/Exception; {:try_start_7 .. :try_end_d} :catch_27
.catchall {:try_start_7 .. :try_end_d} :catchall_34
.line 46
:try_start_d
new-instance v0, Ljava/lang/Thread;
const-string v1, "yymeet-NetLoop"
invoke-direct {v0, p0, v1}, Ljava/lang/Thread;-><init>(Ljava/lang/Runnable;Ljava/lang/String;)V
iput-object v0, p0, Lsg/bigo/sdk/network/c/f;->a:Ljava/lang/Thread;
const-string v0, "NIORunner"
const-string v1, "NIO selector thread starting..."
.line 48
invoke-static {v0, v1}, Lsg/bigo/log/Log;->i(Ljava/lang/String;Ljava/lang/String;)I
const/4 v0, 0x1
.line 49
iput-boolean v0, p0, Lsg/bigo/sdk/network/c/f;->b:Z
.line 50
iget-object v0, p0, Lsg/bigo/sdk/network/c/f;->a:Ljava/lang/Thread;
invoke-virtual {v0}, Ljava/lang/Thread;->start()V
:try_end_25
.catchall {:try_start_d .. :try_end_25} :catchall_34
.line 51
monitor-exit p0
return-void
:catch_27
move-exception v0
:try_start_28
const-string v1, "NIORunner"
const-string v2, "NIO selector.open"
.line 41
invoke-static {v1, v2, v0}, Lsg/bigo/log/Log;->e(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)I
const/4 v0, 0x0
.line 42
iput-boolean v0, p0, Lsg/bigo/sdk/network/c/f;->b:Z
:try_end_32
.catchall {:try_start_28 .. :try_end_32} :catchall_34
.line 43
monitor-exit p0
return-void
:catchall_34
move-exception v0
monitor-exit p0
throw v0
.end method
# virtual methods
.method public final a(Ljava/nio/channels/DatagramChannel;)V
.registers 4
.line 141
:try_start_0
iget-object v0, p0, Lsg/bigo/sdk/network/c/f;->d:Ljava/nio/channels/Selector;
if-nez v0, :cond_8
.line 142
invoke-virtual {p1}, Ljava/nio/channels/DatagramChannel;->close()V
return-void
.line 146
:cond_8
iget-object v0, p0, Lsg/bigo/sdk/network/c/f;->e:Ljava/util/concurrent/locks/ReentrantLock;
invoke-virtual {v0}, Ljava/util/concurrent/locks/ReentrantLock;->lock()V
:try_end_d
.catch Ljava/lang/Exception; {:try_start_0 .. :try_end_d} :catch_27
.line 148
:try_start_d
iget-object v0, p0, Lsg/bigo/sdk/network/c/f;->d:Ljava/nio/channels/Selector;
invoke-virtual {v0}, Ljava/nio/channels/Selector;->wakeup()Ljava/nio/channels/Selector;
.line 149
iget-object v0, p0, Lsg/bigo/sdk/network/c/f;->d:Ljava/nio/channels/Selector;
invoke-virtual {v0}, Ljava/nio/channels/Selector;->keys()Ljava/util/Set;
.line 151
invoke-virtual {p1}, Ljava/nio/channels/DatagramChannel;->close()V
:try_end_1a
.catchall {:try_start_d .. :try_end_1a} :catchall_20
.line 153
:try_start_1a
iget-object p1, p0, Lsg/bigo/sdk/network/c/f;->e:Ljava/util/concurrent/locks/ReentrantLock;
invoke-virtual {p1}, Ljava/util/concurrent/locks/ReentrantLock;->unlock()V
return-void
:catchall_20
move-exception p1
iget-object v0, p0, Lsg/bigo/sdk/network/c/f;->e:Ljava/util/concurrent/locks/ReentrantLock;
invoke-virtual {v0}, Ljava/util/concurrent/locks/ReentrantLock;->unlock()V
throw p1
:try_end_27
.catch Ljava/lang/Exception; {:try_start_1a .. :try_end_27} :catch_27
:catch_27
move-exception p1
const-string v0, "NIORunner"
const-string v1, "close datagram channel throws exception"
.line 156
invoke-static {v0, v1, p1}, Lsg/bigo/log/Log;->w(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)I
return-void
.end method
.method public final a(Ljava/nio/channels/SocketChannel;)V
.registers 4
.line 120
:try_start_0
iget-object v0, p0, Lsg/bigo/sdk/network/c/f;->d:Ljava/nio/channels/Selector;
if-nez v0, :cond_8
.line 121
invoke-virtual {p1}, Ljava/nio/channels/SocketChannel;->close()V
return-void
.line 125
:cond_8
iget-object v0, p0, Lsg/bigo/sdk/network/c/f;->e:Ljava/util/concurrent/locks/ReentrantLock;
invoke-virtual {v0}, Ljava/util/concurrent/locks/ReentrantLock;->lock()V
:try_end_d
.catch Ljava/lang/Exception; {:try_start_0 .. :try_end_d} :catch_27
.line 127
:try_start_d
iget-object v0, p0, Lsg/bigo/sdk/network/c/f;->d:Ljava/nio/channels/Selector;
invoke-virtual {v0}, Ljava/nio/channels/Selector;->wakeup()Ljava/nio/channels/Selector;
.line 128
iget-object v0, p0, Lsg/bigo/sdk/network/c/f;->d:Ljava/nio/channels/Selector;
invoke-virtual {v0}, Ljava/nio/channels/Selector;->keys()Ljava/util/Set;
.line 130
invoke-virtual {p1}, Ljava/nio/channels/SocketChannel;->close()V
:try_end_1a
.catchall {:try_start_d .. :try_end_1a} :catchall_20
.line 132
:try_start_1a
iget-object p1, p0, Lsg/bigo/sdk/network/c/f;->e:Ljava/util/concurrent/locks/ReentrantLock;
invoke-virtual {p1}, Ljava/util/concurrent/locks/ReentrantLock;->unlock()V
return-void
:catchall_20
move-exception p1
iget-object v0, p0, Lsg/bigo/sdk/network/c/f;->e:Ljava/util/concurrent/locks/ReentrantLock;
invoke-virtual {v0}, Ljava/util/concurrent/locks/ReentrantLock;->unlock()V
throw p1
:try_end_27
.catch Ljava/lang/Exception; {:try_start_1a .. :try_end_27} :catch_27
:catch_27
move-exception p1
const-string v0, "NIORunner"
const-string v1, "close socket channel throws exception"
.line 135
invoke-static {v0, v1, p1}, Lsg/bigo/log/Log;->w(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)I
return-void
.end method
.method public final a(Lsg/bigo/sdk/network/c/e;I)V
.registers 6
.line 92
invoke-direct {p0}, Lsg/bigo/sdk/network/c/f;->c()V
const-string v0, "NIORunner"
if-nez p1, :cond_d
const-string p1, "null NIORunnable"
.line 95
invoke-static {v0, p1}, Lsg/bigo/log/Log;->e(Ljava/lang/String;Ljava/lang/String;)I
return-void
.line 99
:cond_d
iget-object v1, p0, Lsg/bigo/sdk/network/c/f;->d:Ljava/nio/channels/Selector;
if-nez v1, :cond_17
const-string p1, "mSelector is not started yet"
.line 100
invoke-static {v0, p1}, Lsg/bigo/log/Log;->e(Ljava/lang/String;Ljava/lang/String;)I
return-void
.line 104
:cond_17
iget-object v1, p0, Lsg/bigo/sdk/network/c/f;->e:Ljava/util/concurrent/locks/ReentrantLock;
invoke-virtual {v1}, Ljava/util/concurrent/locks/ReentrantLock;->lock()V
.line 106
:try_start_1c
iget-object v1, p0, Lsg/bigo/sdk/network/c/f;->d:Ljava/nio/channels/Selector;
invoke-virtual {v1}, Ljava/nio/channels/Selector;->wakeup()Ljava/nio/channels/Selector;
.line 107
invoke-interface {p1}, Lsg/bigo/sdk/network/c/e;->d()Ljava/nio/channels/SelectableChannel;
move-result-object v1
if-eqz v1, :cond_2c
.line 109
iget-object v2, p0, Lsg/bigo/sdk/network/c/f;->d:Ljava/nio/channels/Selector;
invoke-virtual {v1, v2, p2, p1}, Ljava/nio/channels/SelectableChannel;->register(Ljava/nio/channels/Selector;ILjava/lang/Object;)Ljava/nio/channels/SelectionKey;
:try_end_2c
.catch Ljava/nio/channels/ClosedChannelException; {:try_start_1c .. :try_end_2c} :catch_34
.catchall {:try_start_1c .. :try_end_2c} :catchall_32
.line 114
:cond_2c
iget-object p1, p0, Lsg/bigo/sdk/network/c/f;->e:Ljava/util/concurrent/locks/ReentrantLock;
invoke-virtual {p1}, Ljava/util/concurrent/locks/ReentrantLock;->unlock()V
return-void
:catchall_32
move-exception p1
goto :goto_40
:catch_34
move-exception p1
:try_start_35
const-string p2, "nio channel closed"
.line 112
invoke-static {v0, p2, p1}, Lsg/bigo/log/Log;->w(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)I
:try_end_3a
.catchall {:try_start_35 .. :try_end_3a} :catchall_32
.line 114
iget-object p1, p0, Lsg/bigo/sdk/network/c/f;->e:Ljava/util/concurrent/locks/ReentrantLock;
invoke-virtual {p1}, Ljava/util/concurrent/locks/ReentrantLock;->unlock()V
return-void
:goto_40
iget-object p2, p0, Lsg/bigo/sdk/network/c/f;->e:Ljava/util/concurrent/locks/ReentrantLock;
invoke-virtual {p2}, Ljava/util/concurrent/locks/ReentrantLock;->unlock()V
throw p1
.end method
.method public final declared-synchronized b()V
.registers 5
monitor-enter p0
.line 54
:try_start_1
iget-object v0, p0, Lsg/bigo/sdk/network/c/f;->a:Ljava/lang/Thread;
:try_end_3
.catchall {:try_start_1 .. :try_end_3} :catchall_69
if-nez v0, :cond_7
.line 55
monitor-exit p0
return-void
.line 58
:cond_7
:try_start_7
iget-object v0, p0, Lsg/bigo/sdk/network/c/f;->e:Ljava/util/concurrent/locks/ReentrantLock;
invoke-virtual {v0}, Ljava/util/concurrent/locks/ReentrantLock;->lock()V
:try_end_c
.catchall {:try_start_7 .. :try_end_c} :catchall_69
.line 60
:try_start_c
iget-object v0, p0, Lsg/bigo/sdk/network/c/f;->d:Ljava/nio/channels/Selector;
invoke-virtual {v0}, Ljava/nio/channels/Selector;->wakeup()Ljava/nio/channels/Selector;
.line 61
iget-object v0, p0, Lsg/bigo/sdk/network/c/f;->d:Ljava/nio/channels/Selector;
invoke-virtual {v0}, Ljava/nio/channels/Selector;->keys()Ljava/util/Set;
move-result-object v0
invoke-interface {v0}, Ljava/util/Set;->isEmpty()Z
move-result v0
if-nez v0, :cond_2b
const-string v0, "NIORunner"
const-string v1, "NIO selector still running"
.line 62
invoke-static {v0, v1}, Lsg/bigo/log/Log;->w(Ljava/lang/String;Ljava/lang/String;)I
:try_end_24
.catchall {:try_start_c .. :try_end_24} :catchall_62
.line 66
:try_start_24
iget-object v0, p0, Lsg/bigo/sdk/network/c/f;->e:Ljava/util/concurrent/locks/ReentrantLock;
invoke-virtual {v0}, Ljava/util/concurrent/locks/ReentrantLock;->unlock()V
:try_end_29
.catchall {:try_start_24 .. :try_end_29} :catchall_69
.line 63
monitor-exit p0
return-void
.line 66
:cond_2b
:try_start_2b
iget-object v0, p0, Lsg/bigo/sdk/network/c/f;->e:Ljava/util/concurrent/locks/ReentrantLock;
invoke-virtual {v0}, Ljava/util/concurrent/locks/ReentrantLock;->unlock()V
const/4 v0, 0x0
.line 69
iput-boolean v0, p0, Lsg/bigo/sdk/network/c/f;->b:Z
.line 70
iget-object v0, p0, Lsg/bigo/sdk/network/c/f;->a:Ljava/lang/Thread;
invoke-virtual {v0}, Ljava/lang/Thread;->interrupt()V
:try_end_38
.catchall {:try_start_2b .. :try_end_38} :catchall_69
.line 72
:try_start_38
iget-object v0, p0, Lsg/bigo/sdk/network/c/f;->a:Ljava/lang/Thread;
invoke-virtual {v0}, Ljava/lang/Thread;->join()V
:try_end_3d
.catch Ljava/lang/InterruptedException; {:try_start_38 .. :try_end_3d} :catch_3e
.catchall {:try_start_38 .. :try_end_3d} :catchall_69
goto :goto_4d
:catch_3e
move-exception v0
:try_start_3f
const-string v1, "NIORunner"
const-string v2, "join nio thread interrupted"
.line 74
invoke-static {v1, v2, v0}, Lsg/bigo/log/Log;->w(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)I
.line 75
invoke-static {}, Ljava/lang/Thread;->currentThread()Ljava/lang/Thread;
move-result-object v0
invoke-virtual {v0}, Ljava/lang/Thread;->interrupt()V
:goto_4d
const/4 v0, 0x0
.line 77
iput-object v0, p0, Lsg/bigo/sdk/network/c/f;->a:Ljava/lang/Thread;
:try_end_50
.catchall {:try_start_3f .. :try_end_50} :catchall_69
.line 80
:try_start_50
iget-object v1, p0, Lsg/bigo/sdk/network/c/f;->d:Ljava/nio/channels/Selector;
invoke-virtual {v1}, Ljava/nio/channels/Selector;->close()V
:try_end_55
.catch Ljava/io/IOException; {:try_start_50 .. :try_end_55} :catch_56
.catchall {:try_start_50 .. :try_end_55} :catchall_69
goto :goto_5e
:catch_56
move-exception v1
:try_start_57
const-string v2, "NIORunner"
const-string v3, "close selector failed"
.line 82
invoke-static {v2, v3, v1}, Lsg/bigo/log/Log;->w(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)I
.line 84
:goto_5e
iput-object v0, p0, Lsg/bigo/sdk/network/c/f;->d:Ljava/nio/channels/Selector;
:try_end_60
.catchall {:try_start_57 .. :try_end_60} :catchall_69
.line 85
monitor-exit p0
return-void
:catchall_62
move-exception v0
.line 66
:try_start_63
iget-object v1, p0, Lsg/bigo/sdk/network/c/f;->e:Ljava/util/concurrent/locks/ReentrantLock;
invoke-virtual {v1}, Ljava/util/concurrent/locks/ReentrantLock;->unlock()V
throw v0
:try_end_69
.catchall {:try_start_63 .. :try_end_69} :catchall_69
:catchall_69
move-exception v0
monitor-exit p0
throw v0
.end method
.method public final run()V
.registers 6
const-string v0, "NIORunner"
const-string v1, "NIO selector thread started"
.line 163
invoke-static {v0, v1}, Lsg/bigo/log/Log;->i(Ljava/lang/String;Ljava/lang/String;)I
.line 165
:cond_7
:goto_7
iget-boolean v1, p0, Lsg/bigo/sdk/network/c/f;->b:Z
if-eqz v1, :cond_94
.line 170
iget-object v1, p0, Lsg/bigo/sdk/network/c/f;->e:Ljava/util/concurrent/locks/ReentrantLock;
invoke-virtual {v1}, Ljava/util/concurrent/locks/ReentrantLock;->lock()V
.line 171
iget-object v1, p0, Lsg/bigo/sdk/network/c/f;->e:Ljava/util/concurrent/locks/ReentrantLock;
invoke-virtual {v1}, Ljava/util/concurrent/locks/ReentrantLock;->unlock()V
.line 175
:try_start_15
iget-object v1, p0, Lsg/bigo/sdk/network/c/f;->d:Ljava/nio/channels/Selector;
const-wide/16 v2, 0x3e8
invoke-virtual {v1, v2, v3}, Ljava/nio/channels/Selector;->select(J)I
:try_end_1c
.catch Ljava/nio/channels/CancelledKeyException; {:try_start_15 .. :try_end_1c} :catch_91
.catch Ljava/lang/Exception; {:try_start_15 .. :try_end_1c} :catch_89
.line 180
:try_start_1c
iget-object v1, p0, Lsg/bigo/sdk/network/c/f;->d:Ljava/nio/channels/Selector;
invoke-virtual {v1}, Ljava/nio/channels/Selector;->selectedKeys()Ljava/util/Set;
move-result-object v1
.line 181
invoke-interface {v1}, Ljava/util/Set;->iterator()Ljava/util/Iterator;
move-result-object v1
.line 182
:goto_26
invoke-interface {v1}, Ljava/util/Iterator;->hasNext()Z
move-result v2
if-eqz v2, :cond_7
.line 183
invoke-interface {v1}, Ljava/util/Iterator;->next()Ljava/lang/Object;
move-result-object v2
check-cast v2, Ljava/nio/channels/SelectionKey;
:try_end_32
.catch Ljava/lang/Exception; {:try_start_1c .. :try_end_32} :catch_89
.line 185
:try_start_32
invoke-virtual {v2}, Ljava/nio/channels/SelectionKey;->attachment()Ljava/lang/Object;
move-result-object v3
check-cast v3, Lsg/bigo/sdk/network/c/e;
:try_end_38
.catch Ljava/nio/channels/CancelledKeyException; {:try_start_32 .. :try_end_38} :catch_3a
.catchall {:try_start_32 .. :try_end_38} :catchall_84
if-nez v3, :cond_3e
.line 227
:catch_3a
:cond_3a
:goto_3a
:try_start_3a
invoke-interface {v1}, Ljava/util/Iterator;->remove()V
:try_end_3d
.catch Ljava/lang/Exception; {:try_start_3a .. :try_end_3d} :catch_89
goto :goto_26
.line 190
:cond_3e
:try_start_3e
invoke-virtual {v2}, Ljava/nio/channels/SelectionKey;->isValid()Z
move-result v4
if-nez v4, :cond_45
goto :goto_3a
.line 194
:cond_45
invoke-interface {v3}, Lsg/bigo/sdk/network/c/e;->d()Ljava/nio/channels/SelectableChannel;
move-result-object v4
if-nez v4, :cond_4f
.line 195
invoke-virtual {v2}, Ljava/nio/channels/SelectionKey;->cancel()V
goto :goto_3a
.line 199
:cond_4f
invoke-virtual {v2}, Ljava/nio/channels/SelectionKey;->isReadable()Z
move-result v4
if-eqz v4, :cond_58
.line 200
invoke-interface {v3}, Lsg/bigo/sdk/network/c/e;->bb_()V
.line 204
:cond_58
invoke-virtual {v2}, Ljava/nio/channels/SelectionKey;->isValid()Z
move-result v4
if-nez v4, :cond_5f
goto :goto_3a
.line 208
:cond_5f
invoke-virtual {v2}, Ljava/nio/channels/SelectionKey;->isWritable()Z
move-result v4
if-eqz v4, :cond_6c
const/4 v4, 0x1
.line 209
invoke-virtual {p0, v3, v4}, Lsg/bigo/sdk/network/c/f;->a(Lsg/bigo/sdk/network/c/e;I)V
.line 210
invoke-interface {v3}, Lsg/bigo/sdk/network/c/e;->bc_()V
.line 214
:cond_6c
invoke-virtual {v2}, Ljava/nio/channels/SelectionKey;->isValid()Z
move-result v4
if-nez v4, :cond_73
goto :goto_3a
.line 218
:cond_73
invoke-virtual {v2}, Ljava/nio/channels/SelectionKey;->isConnectable()Z
move-result v2
if-eqz v2, :cond_3a
.line 219
invoke-interface {v3}, Lsg/bigo/sdk/network/c/e;->ba_()Z
move-result v2
if-eqz v2, :cond_3a
const/4 v2, 0x5
.line 221
invoke-virtual {p0, v3, v2}, Lsg/bigo/sdk/network/c/f;->a(Lsg/bigo/sdk/network/c/e;I)V
:try_end_83
.catch Ljava/nio/channels/CancelledKeyException; {:try_start_3e .. :try_end_83} :catch_3a
.catchall {:try_start_3e .. :try_end_83} :catchall_84
goto :goto_3a
:catchall_84
move-exception v2
.line 227
:try_start_85
invoke-interface {v1}, Ljava/util/Iterator;->remove()V
throw v2
:try_end_89
.catch Ljava/lang/Exception; {:try_start_85 .. :try_end_89} :catch_89
:catch_89
move-exception v1
const-string v2, "NIO selector thread exception"
.line 231
invoke-static {v0, v2, v1}, Lsg/bigo/log/Log;->e(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)I
goto/16 :goto_7
:catch_91
nop
goto/16 :goto_7
:cond_94
const-string v1, "NIO selector thread stopped"
.line 235
invoke-static {v0, v1}, Lsg/bigo/log/Log;->i(Ljava/lang/String;Ljava/lang/String;)I
return-void
.end method