View Javadoc
1   /*
2    * This file is part of Waarp Project (named also Waarp or GG).
3    *
4    *  Copyright (c) 2019, Waarp SAS, and individual contributors by the @author
5    *  tags. See the COPYRIGHT.txt in the distribution for a full listing of
6    * individual contributors.
7    *
8    *  All Waarp Project is free software: you can redistribute it and/or
9    * modify it under the terms of the GNU General Public License as published by
10   * the Free Software Foundation, either version 3 of the License, or (at your
11   * option) any later version.
12   *
13   * Waarp is distributed in the hope that it will be useful, but WITHOUT ANY
14   * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
15   * A PARTICULAR PURPOSE. See the GNU General Public License for more details.
16   *
17   *  You should have received a copy of the GNU General Public License along with
18   * Waarp . If not, see <http://www.gnu.org/licenses/>.
19   */
20  package org.waarp.openr66.protocol.networkhandler;
21  
22  import org.waarp.common.lru.ConcurrentUtility;
23  
24  import java.util.Set;
25  
26  /**
27   * Client NetworkChannelReference attached to one HostId.
28   * <p>
29   * <p>
30   * <p>
31   * This class is used to keep information for one HostID when it connects as
32   * client to the current Host. As
33   * one Id can be shared or one can use direct send, so having a connection by
34   * request, this class is useful
35   * when one wants to know who is connected and how many times.
36   */
37  public class ClientNetworkChannels {
38  
39    private final String hostId;
40    private final Set<NetworkChannelReference> networkChannelReferences =
41        ConcurrentUtility.newConcurrentSet();
42  
43    public ClientNetworkChannels(final String hostId) {
44      this.hostId = hostId;
45    }
46  
47    public final void add(final NetworkChannelReference networkChannelReference) {
48      networkChannelReferences.add(networkChannelReference);
49      networkChannelReference.clientNetworkChannels = this;
50      networkChannelReference.setHostId(hostId);
51    }
52  
53    public final void remove(
54        final NetworkChannelReference networkChannelReference) {
55      networkChannelReferences.remove(networkChannelReference);
56    }
57  
58    public final Set<NetworkChannelReference> getNetworkChannelReferences() {
59      return networkChannelReferences;
60    }
61  
62    public final boolean isEmpty() {
63      return networkChannelReferences.isEmpty();
64    }
65  
66    public final int size() {
67      return networkChannelReferences.size();
68    }
69  
70    public final boolean shutdownAllNetworkChannels() {
71      boolean status = false;
72      for (final NetworkChannelReference networkChannelReference : networkChannelReferences) {
73        NetworkTransaction.shuttingDownNetworkChannel(networkChannelReference);
74        status = true;
75      }
76      networkChannelReferences.clear();
77      return status;
78    }
79  
80    public final String getHostId() {
81      return hostId;
82    }
83  }