OSDN Git Service

Merge pull request #48 from psiegel/master
[mikumikustudio/libgdx-mikumikustudio.git] / backends / gdx-backend-lwjgl / src / com / badlogic / gdx / backends / lwjgl / LwjglServerSocket.java
1 package com.badlogic.gdx.backends.lwjgl;
2
3 import java.io.InputStream;
4 import java.io.OutputStream;
5 import java.net.InetSocketAddress;
6
7 import com.badlogic.gdx.Net.Protocol;
8 import com.badlogic.gdx.net.ServerSocket;
9 import com.badlogic.gdx.net.ServerSocketHints;
10 import com.badlogic.gdx.net.Socket;
11 import com.badlogic.gdx.net.SocketHints;
12 import com.badlogic.gdx.utils.GdxRuntimeException;
13
14 /**
15  * Server socket implementation using java.net.ServerSocket.
16  * 
17  * @author noblemaster
18  */
19 public class LwjglServerSocket implements ServerSocket {
20
21         private Protocol protocol;
22         
23         /** Our server or null for disposed, aka closed. */
24         private java.net.ServerSocket server;
25         
26         
27         public LwjglServerSocket(Protocol protocol, int port, ServerSocketHints hints) {
28                 this.protocol = protocol;
29                 
30                 // create the server socket
31                 try {
32                         // initialize
33                         server = new java.net.ServerSocket();
34                         if (hints != null) {
35                                 server.setPerformancePreferences(hints.performancePrefConnectionTime, 
36                                                                                                                         hints.performancePrefLatency, 
37                                                                                                                         hints.performancePrefBandwidth);
38                                 server.setReuseAddress(hints.reuseAddress);
39                                 server.setSoTimeout(hints.acceptTimeout);
40                                 server.setReceiveBufferSize(hints.receiveBufferSize);
41                         }
42                         
43                         // and bind the server...
44                         InetSocketAddress address = new InetSocketAddress(port);
45                         if (hints != null) {
46                                 server.bind(address, hints.backlog);
47                         }
48                         else {
49                                 server.bind(address);
50                         }
51                 }
52                 catch (Exception e) {
53                         throw new GdxRuntimeException("Cannot create a server socket at port " + port + ".", e);
54                 }
55         }
56
57         @Override
58         public Protocol getProtocol () {
59                 return protocol;
60         }
61
62         @Override
63         public Socket accept(SocketHints hints) {
64                 try {
65                         return new LwjglSocket(server.accept(), hints);
66                 }
67                 catch (Exception e) {
68                         throw new GdxRuntimeException("Error accepting socket.", e);
69                 }
70         }
71
72         @Override
73         public void dispose() {
74                 if (server != null) {
75                         try {
76                                 server.close();
77                                 server = null;
78                         }
79                         catch (Exception e) {
80                                 throw new GdxRuntimeException("Error closing server.", e);
81                         }
82                 }
83         }
84 }