e.smali
.class public final Lsg/bigo/opensdk/rtm/internal/d/e;
.super Ljava/lang/Object;
.source "SourceFile"
# interfaces
.implements Ljava/lang/Runnable;
# static fields
.field private static final c:Lsg/bigo/opensdk/rtm/internal/d/e;
# 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/opensdk/rtm/internal/d/e;
invoke-direct {v0}, Lsg/bigo/opensdk/rtm/internal/d/e;-><init>()V
sput-object v0, Lsg/bigo/opensdk/rtm/internal/d/e;->c:Lsg/bigo/opensdk/rtm/internal/d/e;
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/opensdk/rtm/internal/d/e;->e:Ljava/util/concurrent/locks/ReentrantLock;
return-void
.end method
.method public static a()Lsg/bigo/opensdk/rtm/internal/d/e;
.registers 1
.line 31
sget-object v0, Lsg/bigo/opensdk/rtm/internal/d/e;->c:Lsg/bigo/opensdk/rtm/internal/d/e;
return-object v0
.end method
.method private declared-synchronized b()V
.registers 4
monitor-enter p0
.line 35
:try_start_1
iget-object v0, p0, Lsg/bigo/opensdk/rtm/internal/d/e;->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/opensdk/rtm/internal/d/e;->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/opensdk/rtm/internal/d/e;->a:Ljava/lang/Thread;
const-string v0, "NIORunner"
const-string v1, "NIO selector thread starting..."
.line 48
invoke-static {v0, v1}, Lsg/bigo/opensdk/d/d;->a(Ljava/lang/String;Ljava/lang/String;)V
const/4 v0, 0x1
.line 49
iput-boolean v0, p0, Lsg/bigo/opensdk/rtm/internal/d/e;->b:Z
.line 50
iget-object v0, p0, Lsg/bigo/opensdk/rtm/internal/d/e;->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/opensdk/d/d;->b(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)V
const/4 v0, 0x0
.line 42
iput-boolean v0, p0, Lsg/bigo/opensdk/rtm/internal/d/e;->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/SocketChannel;)V
.registers 4
.line 120
:try_start_0
iget-object v0, p0, Lsg/bigo/opensdk/rtm/internal/d/e;->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/opensdk/rtm/internal/d/e;->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/opensdk/rtm/internal/d/e;->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/opensdk/rtm/internal/d/e;->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/opensdk/rtm/internal/d/e;->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/opensdk/rtm/internal/d/e;->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/opensdk/d/d;->a(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)V
return-void
.end method
.method public final a(Lsg/bigo/opensdk/rtm/internal/d/d;I)V
.registers 6
.line 92
invoke-direct {p0}, Lsg/bigo/opensdk/rtm/internal/d/e;->b()V
const-string v0, "NIORunner"
if-nez p1, :cond_d
const-string p1, "null NIORunnable"
.line 95
invoke-static {v0, p1}, Lsg/bigo/opensdk/d/d;->c(Ljava/lang/String;Ljava/lang/String;)V
return-void
.line 99
:cond_d
iget-object v1, p0, Lsg/bigo/opensdk/rtm/internal/d/e;->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/opensdk/d/d;->c(Ljava/lang/String;Ljava/lang/String;)V
return-void
.line 104
:cond_17
iget-object v1, p0, Lsg/bigo/opensdk/rtm/internal/d/e;->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/opensdk/rtm/internal/d/e;->d:Ljava/nio/channels/Selector;
invoke-virtual {v1}, Ljava/nio/channels/Selector;->wakeup()Ljava/nio/channels/Selector;
.line 107
invoke-interface {p1}, Lsg/bigo/opensdk/rtm/internal/d/d;->c()Ljava/nio/channels/SelectableChannel;
move-result-object v1
if-eqz v1, :cond_2c
.line 109
iget-object v2, p0, Lsg/bigo/opensdk/rtm/internal/d/e;->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/opensdk/rtm/internal/d/e;->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/opensdk/d/d;->a(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)V
:try_end_3a
.catchall {:try_start_35 .. :try_end_3a} :catchall_32
.line 114
iget-object p1, p0, Lsg/bigo/opensdk/rtm/internal/d/e;->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/opensdk/rtm/internal/d/e;->e:Ljava/util/concurrent/locks/ReentrantLock;
invoke-virtual {p2}, Ljava/util/concurrent/locks/ReentrantLock;->unlock()V
throw p1
.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/opensdk/d/d;->a(Ljava/lang/String;Ljava/lang/String;)V
.line 165
:cond_7
:goto_7
iget-boolean v1, p0, Lsg/bigo/opensdk/rtm/internal/d/e;->b:Z
if-eqz v1, :cond_99
.line 170
iget-object v1, p0, Lsg/bigo/opensdk/rtm/internal/d/e;->e:Ljava/util/concurrent/locks/ReentrantLock;
invoke-virtual {v1}, Ljava/util/concurrent/locks/ReentrantLock;->lock()V
.line 171
iget-object v1, p0, Lsg/bigo/opensdk/rtm/internal/d/e;->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/opensdk/rtm/internal/d/e;->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_96
.catch Ljava/lang/Exception; {:try_start_15 .. :try_end_1c} :catch_8e
.line 180
:try_start_1c
iget-object v1, p0, Lsg/bigo/opensdk/rtm/internal/d/e;->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_8e
.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/opensdk/rtm/internal/d/d;
:try_end_38
.catch Ljava/nio/channels/CancelledKeyException; {:try_start_32 .. :try_end_38} :catch_86
.catchall {:try_start_32 .. :try_end_38} :catchall_84
if-nez v3, :cond_3e
.line 227
: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_8e
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/opensdk/rtm/internal/d/d;->c()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/opensdk/rtm/internal/d/d;->aX_()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/opensdk/rtm/internal/d/e;->a(Lsg/bigo/opensdk/rtm/internal/d/d;I)V
.line 210
invoke-interface {v3}, Lsg/bigo/opensdk/rtm/internal/d/d;->aY_()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/opensdk/rtm/internal/d/d;->aW_()Z
move-result v2
if-eqz v2, :cond_3a
const/4 v2, 0x5
.line 221
invoke-virtual {p0, v3, v2}, Lsg/bigo/opensdk/rtm/internal/d/e;->a(Lsg/bigo/opensdk/rtm/internal/d/d;I)V
:try_end_83
.catch Ljava/nio/channels/CancelledKeyException; {:try_start_3e .. :try_end_83} :catch_86
.catchall {:try_start_3e .. :try_end_83} :catchall_84
goto :goto_3a
:catchall_84
move-exception v2
goto :goto_8a
.line 225
:catch_86
:try_start_86
invoke-static {}, Lsg/bigo/opensdk/d/d;->c()V
:try_end_89
.catchall {:try_start_86 .. :try_end_89} :catchall_84
goto :goto_3a
.line 227
:goto_8a
:try_start_8a
invoke-interface {v1}, Ljava/util/Iterator;->remove()V
throw v2
:try_end_8e
.catch Ljava/lang/Exception; {:try_start_8a .. :try_end_8e} :catch_8e
:catch_8e
move-exception v1
const-string v2, "NIO selector thread exception"
.line 231
invoke-static {v0, v2, v1}, Lsg/bigo/opensdk/d/d;->b(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)V
goto/16 :goto_7
:catch_96
nop
goto/16 :goto_7
:cond_99
const-string v1, "NIO selector thread stopped"
.line 235
invoke-static {v0, v1}, Lsg/bigo/opensdk/d/d;->a(Ljava/lang/String;Ljava/lang/String;)V
return-void
.end method