All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.newsclub.net.unix.darwin.system.AFSYSTEMSelectorProvider Maven / Gradle / Ivy

The newest version!
/*
 * junixsocket
 *
 * Copyright 2009-2024 Christian Kohlschütter
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.newsclub.net.unix.darwin.system;

import java.io.IOException;
import java.net.ProtocolFamily;
import java.net.SocketAddress;

import org.eclipse.jdt.annotation.NonNull;
import org.newsclub.net.unix.AFAddressFamily;
import org.newsclub.net.unix.AFAddressFamilyConfig;
import org.newsclub.net.unix.AFDatagramChannel;
import org.newsclub.net.unix.AFDatagramSocket;
import org.newsclub.net.unix.AFSYSTEMSocketAddress;
import org.newsclub.net.unix.AFSelectorProvider;
import org.newsclub.net.unix.AFServerSocket;
import org.newsclub.net.unix.AFServerSocketChannel;
import org.newsclub.net.unix.AFSocket;
import org.newsclub.net.unix.AFSocketChannel;
import org.newsclub.net.unix.AFSocketPair;
import org.newsclub.net.unix.AFSocketType;
import org.newsclub.net.unix.AFSomeSocket;

import com.kohlschutter.annotations.compiletime.SuppressFBWarnings;

/**
 * Service-provider class for junixsocket selectors and selectable channels.
 */
public final class AFSYSTEMSelectorProvider extends AFSelectorProvider {
  private static final AFSYSTEMSelectorProvider INSTANCE = new AFSYSTEMSelectorProvider();

  @SuppressWarnings("null")
  static final AFAddressFamily<@NonNull AFSYSTEMSocketAddress> AF_SYSTEM = AFAddressFamily
      .registerAddressFamilyImpl("system", AFSYSTEMSocketAddress.addressFamily(),
          new AFAddressFamilyConfig() {

            @Override
            protected Class> socketClass() {
              return AFSYSTEMSocket.class;
            }

            @Override
            protected AFSocket.Constructor socketConstructor() {
              return AFSYSTEMSocket::new;
            }

            @Override
            protected Class> serverSocketClass() {
              return AFSYSTEMServerSocket.class;
            }

            @Override
            protected AFServerSocket.Constructor serverSocketConstructor() {
              return AFSYSTEMServerSocket::new;
            }

            @Override
            protected Class> socketChannelClass() {
              return AFSYSTEMSocketChannel.class;
            }

            @Override
            protected Class> serverSocketChannelClass() {
              return AFSYSTEMServerSocketChannel.class;
            }

            @Override
            protected Class> datagramSocketClass() {
              return AFSYSTEMDatagramSocket.class;
            }

            @Override
            protected AFDatagramSocket.Constructor datagramSocketConstructor() {
              return AFSYSTEMDatagramSocket::new;
            }

            @Override
            protected Class> datagramChannelClass() {
              return AFSYSTEMDatagramChannel.class;
            }
          });

  private AFSYSTEMSelectorProvider() {
    super();
  }

  /**
   * Returns the singleton instance.
   *
   * @return The instance.
   */
  @SuppressFBWarnings("MS_EXPOSE_REP")
  public static AFSYSTEMSelectorProvider getInstance() {
    return INSTANCE;
  }

  /**
   * Returns the singleton instance.
   *
   * @return The instance.
   */
  public static AFSYSTEMSelectorProvider provider() {
    return getInstance();
  }

  /**
   * Constructs a new socket pair from two sockets.
   *
   * @param s1 Some socket, the first one.
   * @param s2 Some socket, the second one.
   * @return The pair.
   */
  @Override
  protected 

AFSocketPair

newSocketPair(P s1, P s2) { return new AFSYSTEMSocketPair<>(s1, s2); } @SuppressWarnings("unchecked") @Override public AFSYSTEMSocketPair openSocketChannelPair() throws IOException { return (AFSYSTEMSocketPair) super.openSocketChannelPair(); } @SuppressWarnings("unchecked") @Override public AFSYSTEMSocketPair openDatagramChannelPair() throws IOException { return (AFSYSTEMSocketPair) super.openDatagramChannelPair(); } @SuppressWarnings("unchecked") @Override public AFSYSTEMSocketPair openDatagramChannelPair(AFSocketType type) throws IOException { return (AFSYSTEMSocketPair) super.openDatagramChannelPair(type); } @Override protected AFSYSTEMSocket newSocket() throws IOException { return AFSYSTEMSocket.newInstance(); } @Override public AFSYSTEMDatagramChannel openDatagramChannel() throws IOException { return AFSYSTEMDatagramSocket.newInstance().getChannel(); } @Override public AFSYSTEMDatagramChannel openDatagramChannel(AFSocketType type) throws IOException { return AFSYSTEMDatagramSocket.newInstance(type).getChannel(); } @Override public AFSYSTEMDatagramChannel openDatagramChannel(ProtocolFamily family) throws IOException { return (AFSYSTEMDatagramChannel) super.openDatagramChannel(family); } @Override public AFSYSTEMServerSocketChannel openServerSocketChannel() throws IOException { return AFSYSTEMServerSocket.newInstance().getChannel(); } @Override public AFSYSTEMServerSocketChannel openServerSocketChannel(SocketAddress sa) throws IOException { return AFSYSTEMServerSocket.bindOn(AFSYSTEMSocketAddress.unwrap(sa)).getChannel(); } @Override public AFSYSTEMSocketChannel openSocketChannel() throws IOException { return (AFSYSTEMSocketChannel) super.openSocketChannel(); } @Override public AFSYSTEMSocketChannel openSocketChannel(SocketAddress sa) throws IOException { return AFSYSTEMSocket.connectTo(AFSYSTEMSocketAddress.unwrap(sa)).getChannel(); } @Override protected ProtocolFamily protocolFamily() { return AFSYSTEMProtocolFamily.SYSTEM; } @Override protected AFAddressFamily<@NonNull AFSYSTEMSocketAddress> addressFamily() { return AF_SYSTEM; } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy