• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2011 jMonkeyEngine
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions are
7  * met:
8  *
9  * * Redistributions of source code must retain the above copyright
10  *   notice, this list of conditions and the following disclaimer.
11  *
12  * * Redistributions in binary form must reproduce the above copyright
13  *   notice, this list of conditions and the following disclaimer in the
14  *   documentation and/or other materials provided with the distribution.
15  *
16  * * Neither the name of 'jMonkeyEngine' nor the names of its contributors
17  *   may be used to endorse or promote products derived from this software
18  *   without specific prior written permission.
19  *
20  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
22  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
23  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
24  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
25  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
26  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
27  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
28  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
29  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
30  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31  */
32 
33 package com.jme3.network;
34 
35 import java.util.Collection;
36 
37 /**
38  *  Represents a host that can send and receive messages to
39  *  a set of remote client connections.
40  *
41  *  @version   $Revision: 8938 $
42  *  @author    Paul Speed
43  */
44 public interface Server
45 {
46     /**
47      *  Returns the 'game name' for this server.  This should match the
48      *  'game name' set on connecting clients or they will be turned away.
49      */
getGameName()50     public String getGameName();
51 
52     /**
53      *  Returns the game-specific version of this server used for detecting
54      *  mismatched clients.
55      */
getVersion()56     public int getVersion();
57 
58     /**
59      *  Sends the specified message to all connected clients.
60      */
broadcast( Message message )61     public void broadcast( Message message );
62 
63     /**
64      *  Sends the specified message to all connected clients that match
65      *  the filter.  If no filter is specified then this is the same as
66      *  calling broadcast(message) and the message will be delivered to
67      *  all connections.
68      *  <p>Examples:</p>
69      *  <pre>
70      *    // Broadcast to connections: conn1, conn2, and conn3
71      *    server.broadcast( Filters.in( conn1, conn2, conn3 ), message );
72      *
73      *    // Broadcast to all connections exception source
74      *    server.broadcast( Filters.notEqualTo( source ), message );
75      *  </pre>
76      */
broadcast( Filter<? super HostedConnection> filter, Message message )77     public void broadcast( Filter<? super HostedConnection> filter, Message message );
78 
79     /**
80      *  Sends the specified message over the specified alternate channel to all connected
81      *  clients that match the filter.  If no filter is specified then this is the same as
82      *  calling broadcast(message) and the message will be delivered to
83      *  all connections.
84      *  <p>Examples:</p>
85      *  <pre>
86      *    // Broadcast to connections: conn1, conn2, and conn3
87      *    server.broadcast( Filters.in( conn1, conn2, conn3 ), message );
88      *
89      *    // Broadcast to all connections exception source
90      *    server.broadcast( Filters.notEqualTo( source ), message );
91      *  </pre>
92      */
broadcast( int channel, Filter<? super HostedConnection> filter, Message message )93     public void broadcast( int channel, Filter<? super HostedConnection> filter, Message message );
94 
95     /**
96      *  Start the server so that it will began accepting new connections
97      *  and processing messages.
98      */
start()99     public void start();
100 
101     /**
102      *  Adds an alternate channel to the server, using the specified port.  This is an
103      *  entirely separate connection where messages are sent and received in parallel
104      *  to the two primary default channels.  All channels must be added before the connection
105      *  is started.
106      *  Returns the ID of the created channel for use when specifying the channel in send or
107      *  broadcast calls.  The ID is returned entirely out of convenience since the IDs
108      *  are predictably incremented.  The first channel is 0, second is 1, and so on.
109      */
addChannel( int port )110     public int addChannel( int port );
111 
112     /**
113      *  Returns true if the server has been started.
114      */
isRunning()115     public boolean isRunning();
116 
117     /**
118      *  Closes all client connections, stops and running processing threads, and
119      *  closes the host connection.
120      */
close()121     public void close();
122 
123     /**
124      *  Retrieves a hosted connection by ID.
125      */
getConnection( int id )126     public HostedConnection getConnection( int id );
127 
128     /**
129      *  Retrieves a read-only collection of all currently connected connections.
130      */
getConnections()131     public Collection<HostedConnection> getConnections();
132 
133     /**
134      *  Returns true if the server has active connections at the time of this
135      *  call.
136      */
hasConnections()137     public boolean hasConnections();
138 
139     /**
140      *  Adds a listener that will be notified when new hosted connections
141      *  arrive.
142      */
addConnectionListener( ConnectionListener listener )143     public void addConnectionListener( ConnectionListener listener );
144 
145     /**
146      *  Removes a previously registered connection listener.
147      */
removeConnectionListener( ConnectionListener listener )148     public void removeConnectionListener( ConnectionListener listener );
149 
150     /**
151      *  Adds a listener that will be notified when any message or object
152      *  is received from one of the clients.
153      *
154      *  <p>Note about MessageListener multithreading: on the server, message events may
155      *  be delivered by more than one thread depending on the server
156      *  implementation used.  Listener implementations should treat their
157      *  shared data structures accordingly and set them up for multithreaded
158      *  access.  The only threading guarantee is that for a single
159      *  HostedConnection, there will only ever be one thread at a time
160      *  and the messages will always be delivered to that connection in the
161      *  order that they were delivered.  This is the only restriction placed
162      *  upon server message dispatch pool implementations.</p>
163      */
addMessageListener( MessageListener<? super HostedConnection> listener )164     public void addMessageListener( MessageListener<? super HostedConnection> listener );
165 
166     /**
167      *  Adds a listener that will be notified when messages of the specified
168      *  types are received from one of the clients.
169      */
addMessageListener( MessageListener<? super HostedConnection> listener, Class... classes )170     public void addMessageListener( MessageListener<? super HostedConnection> listener, Class... classes );
171 
172     /**
173      *  Removes a previously registered wildcard listener.  This does
174      *  not remove this listener from any type-specific registrations.
175      */
removeMessageListener( MessageListener<? super HostedConnection> listener )176     public void removeMessageListener( MessageListener<? super HostedConnection> listener );
177 
178     /**
179      *  Removes a previously registered type-specific listener from
180      *  the specified types.
181      */
removeMessageListener( MessageListener<? super HostedConnection> listener, Class... classes )182     public void removeMessageListener( MessageListener<? super HostedConnection> listener, Class... classes );
183 
184 
185 }
186 
187