/* * Copyright 2016 Netflix, Inc. * * 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 io.reactivex.netty.client; import io.reactivex.netty.client.events.ClientEventListener; import io.reactivex.netty.events.EventPublisher; import io.reactivex.netty.events.EventSource; import rx.Subscription; public class HostConnector<W, R> implements EventSource<ClientEventListener> { private final Host host; private final ConnectionProvider<W, R> connectionProvider; @SuppressWarnings("rawtypes") private final EventSource eventSource; private final EventPublisher publisher; private final ClientEventListener clientPublisher; public HostConnector(Host host, ConnectionProvider<W, R> connectionProvider, EventSource<? extends ClientEventListener> eventSource, EventPublisher publisher, ClientEventListener clientPublisher) { this.host = host; this.connectionProvider = connectionProvider; this.eventSource = eventSource; this.publisher = publisher; this.clientPublisher = clientPublisher; } public HostConnector(HostConnector<W, R> source, ConnectionProvider<W, R> connectionProvider) { this.connectionProvider = connectionProvider; host = source.host; eventSource = source.eventSource; clientPublisher = source.clientPublisher; publisher = source.publisher; } public Host getHost() { return host; } public ConnectionProvider<W, R> getConnectionProvider() { return connectionProvider; } public ClientEventListener getClientPublisher() { return clientPublisher; } public EventPublisher getEventPublisher() { return publisher; } @Override @SuppressWarnings("unchecked") public Subscription subscribe(ClientEventListener listener) { return eventSource.subscribe(listener); } @Override public boolean equals(Object o) { if (this == o) { return true; } if (!(o instanceof HostConnector)) { return false; } HostConnector<?, ?> that = (HostConnector<?, ?>) o; if (host != null? !host.equals(that.host) : that.host != null) { return false; } if (connectionProvider != null? !connectionProvider.equals(that.connectionProvider) : that.connectionProvider != null) { return false; } if (eventSource != null? !eventSource.equals(that.eventSource) : that.eventSource != null) { return false; } if (publisher != null? !publisher.equals(that.publisher) : that.publisher != null) { return false; } return clientPublisher != null? clientPublisher.equals(that.clientPublisher) : that.clientPublisher == null; } @Override public int hashCode() { int result = host != null? host.hashCode() : 0; result = 31 * result + (connectionProvider != null? connectionProvider.hashCode() : 0); result = 31 * result + (eventSource != null? eventSource.hashCode() : 0); result = 31 * result + (publisher != null? publisher.hashCode() : 0); result = 31 * result + (clientPublisher != null? clientPublisher.hashCode() : 0); return result; } }