导航菜单

页面标题

页面副标题

BodyTech v7.6.4 - ServerSocketImpl.java 源代码

正在查看: BodyTech v7.6.4 应用的 ServerSocketImpl.java JAVA 源代码文件

本页面展示 JAVA 反编译生成的源代码文件,支持语法高亮显示。 仅供安全研究与技术分析使用,严禁用于任何非法用途。请遵守相关法律法规。


package io.ktor.network.sockets;

import io.ktor.network.selector.InterestSuspensionsMap;
import io.ktor.network.selector.SelectInterest;
import io.ktor.network.selector.Selectable;
import io.ktor.network.selector.SelectableBase;
import io.ktor.network.selector.SelectorManager;
import io.ktor.network.sockets.ServerSocket;
import java.net.SocketOption;
import java.net.StandardSocketOptions;
import java.nio.channels.ServerSocketChannel;
import java.nio.channels.SocketChannel;
import kotlin.Metadata;
import kotlin.coroutines.Continuation;
import kotlinx.coroutines.CompletableJob;
import kotlinx.coroutines.Job;
import kotlinx.coroutines.JobKt__JobKt;

@Metadata(d1 = {"\u0000b\n\u0002\u0018\u0002\n\u0002\u0018\u0002\n\u0002\u0018\u0002\n\u0000\n\u0002\u0018\u0002\n\u0000\n\u0002\u0018\u0002\n\u0002\b\u0004\n\u0002\u0010\b\n\u0002\b\u0003\n\u0002\u0010\u000b\n\u0002\b\u0002\n\u0002\u0018\u0002\n\u0002\b\u0005\n\u0002\u0018\u0002\n\u0002\b\u0003\n\u0002\u0018\u0002\n\u0002\b\u0003\n\u0002\u0018\u0002\n\u0002\b\u0004\n\u0002\u0018\u0002\n\u0000\n\u0002\u0010\u0002\n\u0002\b\u0003\n\u0002\u0018\u0002\n\u0002\b\u0002\b\u0000\u0018\u00002\u00020\u00012\u00020\u0002B\u0015\u0012\u0006\u0010\u0003\u001a\u00020\u0004\u0012\u0006\u0010\u0005\u001a\u00020\u0006¢\u0006\u0002\u0010\u0007J\u0011\u0010\u001f\u001a\u00020 H\u0096@ø\u0001\u0000¢\u0006\u0002\u0010!J\u0011\u0010\"\u001a\u00020 H\u0082@ø\u0001\u0000¢\u0006\u0002\u0010!J\u0010\u0010#\u001a\u00020 2\u0006\u0010$\u001a\u00020%H\u0002J\b\u0010&\u001a\u00020'H\u0016J\b\u0010(\u001a\u00020'H\u0016J\u0019\u0010)\u001a\u00020'2\u0006\u0010*\u001a\u00020+2\u0006\u0010,\u001a\u00020\u000fH\u0096\u0001R\u0014\u0010\u0003\u001a\u00020\u0004X\u0096\u0004¢\u0006\b\n\u0000\u001a\u0004\b\b\u0010\tR\u0012\u0010\n\u001a\u00020\u000bX\u0096\u0005¢\u0006\u0006\u001a\u0004\b\f\u0010\rR\u0012\u0010\u000e\u001a\u00020\u000fX\u0096\u0005¢\u0006\u0006\u001a\u0004\b\u000e\u0010\u0010R\u0014\u0010\u0011\u001a\u00020\u00128VX\u0096\u0004¢\u0006\u0006\u001a\u0004\b\u0013\u0010\u0014R\u0011\u0010\u0005\u001a\u00020\u0006¢\u0006\b\n\u0000\u001a\u0004\b\u0015\u0010\u0016R\u0014\u0010\u0017\u001a\u00020\u0018X\u0096\u0004¢\u0006\b\n\u0000\u001a\u0004\b\u0019\u0010\u001aR\u0012\u0010\u001b\u001a\u00020\u001cX\u0096\u0005¢\u0006\u0006\u001a\u0004\b\u001d\u0010\u001e\u0082\u0002\u0004\n\u0002\b\u0019¨\u0006-"}, d2 = {"Lio/ktor/network/sockets/ServerSocketImpl;", "Lio/ktor/network/sockets/ServerSocket;", "Lio/ktor/network/selector/Selectable;", "channel", "Ljava/nio/channels/ServerSocketChannel;", "selector", "Lio/ktor/network/selector/SelectorManager;", "(Ljava/nio/channels/ServerSocketChannel;Lio/ktor/network/selector/SelectorManager;)V", "getChannel", "()Ljava/nio/channels/ServerSocketChannel;", "interestedOps", "", "getInterestedOps", "()I", "isClosed", "", "()Z", "localAddress", "Lio/ktor/network/sockets/SocketAddress;", "getLocalAddress", "()Lio/ktor/network/sockets/SocketAddress;", "getSelector", "()Lio/ktor/network/selector/SelectorManager;", "socketContext", "Lkotlinx/coroutines/CompletableJob;", "getSocketContext", "()Lkotlinx/coroutines/CompletableJob;", "suspensions", "Lio/ktor/network/selector/InterestSuspensionsMap;", "getSuspensions", "()Lio/ktor/network/selector/InterestSuspensionsMap;", "accept", "Lio/ktor/network/sockets/Socket;", "(Lkotlin/coroutines/Continuation;)Ljava/lang/Object;", "acceptSuspend", "accepted", "nioChannel", "Ljava/nio/channels/SocketChannel;", "close", "", "dispose", "interestOp", "interest", "Lio/ktor/network/selector/SelectInterest;", "state", "ktor-network"}, k = 1, mv = {1, 8, 0}, xi = 48)
public final class ServerSocketImpl implements ServerSocket, Selectable {
    private final SelectableBase $$delegate_0;
    private final ServerSocketChannel channel;
    private final SelectorManager selector;
    private final CompletableJob socketContext;

    public ServerSocketImpl(ServerSocketChannel channel, SelectorManager selector) {
        CompletableJob Job$default;
        kotlin.jvm.internal.r.i(channel, "channel");
        kotlin.jvm.internal.r.i(selector, "selector");
        this.channel = channel;
        this.selector = selector;
        this.$$delegate_0 = new SelectableBase(channel);
        if (!(!getChannel().isBlocking())) {
            throw new IllegalArgumentException("Channel need to be configured as non-blocking.".toString());
        }
        Job$default = JobKt__JobKt.Job$default((Job) null, 1, (Object) null);
        this.socketContext = Job$default;
    }

    public final java.lang.Object acceptSuspend(kotlin.coroutines.Continuation<? super io.ktor.network.sockets.Socket> r6) {
        throw new UnsupportedOperationException("Method not decompiled: io.ktor.network.sockets.ServerSocketImpl.acceptSuspend(kotlin.coroutines.Continuation):java.lang.Object");
    }

    private final Socket accepted(SocketChannel nioChannel) {
        SocketOption socketOption;
        interestOp(SelectInterest.ACCEPT, false);
        nioChannel.configureBlocking(false);
        if (getLocalAddress() instanceof InetSocketAddress) {
            if (JavaSocketOptionsKt.getJava7NetworkApisAvailable()) {
                socketOption = StandardSocketOptions.TCP_NODELAY;
                nioChannel.setOption((SocketOption<SocketOption<SocketOption>>) ((SocketOption<SocketOption>) socketOption), (SocketOption<SocketOption>) ((SocketOption) Boolean.TRUE));
            } else {
                nioChannel.socket().setTcpNoDelay(true);
            }
        }
        return new SocketImpl(nioChannel, this.selector, null, 4, null);
    }

    @Override
    public Object accept(Continuation<? super Socket> continuation) {
        SocketChannel accept = getChannel().accept();
        return accept != null ? accepted(accept) : acceptSuspend(continuation);
    }

    @Override
    public void close() {
        try {
            try {
                getChannel().close();
                this.selector.notifyClosed(this);
                getSocketContext().complete();
            } catch (Throwable th2) {
                this.selector.notifyClosed(this);
                throw th2;
            }
        } catch (Throwable th3) {
            getSocketContext().completeExceptionally(th3);
        }
    }

    @Override
    public void dispose() {
        ServerSocket.DefaultImpls.dispose(this);
    }

    @Override
    public ServerSocketChannel getChannel() {
        return this.channel;
    }

    @Override
    public int get_interestedOps() {
        return this.$$delegate_0.get_interestedOps();
    }

    @Override
    public SocketAddress getLocalAddress() {
        java.net.SocketAddress localAddress = JavaSocketOptionsKt.getJava7NetworkApisAvailable() ? getChannel().getLocalAddress() : getChannel().socket().getLocalSocketAddress();
        kotlin.jvm.internal.r.h(localAddress, "localAddress");
        return JavaSocketAddressUtilsKt.toSocketAddress(localAddress);
    }

    public final SelectorManager getSelector() {
        return this.selector;
    }

    @Override
    public CompletableJob getSocketContext() {
        return this.socketContext;
    }

    @Override
    public InterestSuspensionsMap getSuspensions() {
        return this.$$delegate_0.getSuspensions();
    }

    @Override
    public void interestOp(SelectInterest interest, boolean state) {
        kotlin.jvm.internal.r.i(interest, "interest");
        this.$$delegate_0.interestOp(interest, state);
    }

    @Override
    public boolean isClosed() {
        return this.$$delegate_0.isClosed();
    }
}