001: /*
002: * Copyright (c) 2001 Silvere Martin-Michiellot All Rights Reserved.
003: *
004: * Silvere Martin-Michiellot grants you ("Licensee") a non-exclusive,
005: * royalty free, license to use, modify and redistribute this
006: * software in source and binary code form,
007: * provided that i) this copyright notice and license appear on all copies of
008: * the software; and ii) Licensee does not utilize the software in a manner
009: * which is disparaging to Silvere Martin-Michiellot.
010: *
011: * This software is provided "AS IS," without a warranty of any kind. ALL
012: * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING ANY
013: * IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR
014: * NON-INFRINGEMENT, ARE HEREBY EXCLUDED. Silvere Martin-Michiellot
015: * AND ITS LICENSORS SHALL NOT BE LIABLE FOR ANY DAMAGES
016: * SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING
017: * OR DISTRIBUTING THE SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL
018: * Silvere Martin-Michiellot OR ITS LICENSORS BE LIABLE
019: * FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR DIRECT,
020: * INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER
021: * CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF THE USE OF
022: * OR INABILITY TO USE SOFTWARE, EVEN IF Silvere Martin-Michiellot HAS BEEN
023: * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
024: *
025: * This software is not designed or intended for use in on-line control of
026: * aircraft, air traffic, aircraft navigation or aircraft communications; or in
027: * the design, construction, operation or maintenance of any nuclear
028: * facility. Licensee represents and warrants that it will not use or
029: * redistribute the Software for such purposes.
030: *
031: * @Author: Silvere Martin-Michiellot
032: *
033: */
034:
035: package com.db.server;
036:
037: import java.io.*;
038: import java.net.*;
039: import java.util.Hashtable;
040:
041: import com.db.net.*;
042:
043: //Gate is used for two different purposes:
044: //it defines a kind of UniverseServerBasicInformation (equivalent to WorldSpotBasicInformation)
045: //it defines an access point to distant servers
046:
047: public class Gate {
048:
049: private Hashtable information;
050: private InetAddress IP;
051: private int port;
052:
053: public Gate(InetAddress IP, int port) {
054:
055: this .IP = IP;
056: this .port = port;
057:
058: }
059:
060: public Gate(Hashtable information, InetAddress IP, int port) {
061:
062: this .information = information;
063: this .IP = IP;
064: this .port = port;
065:
066: }
067:
068: public final Hashtable getInformation(UniverseServer universeServer) {
069:
070: if (this .information == null) {
071: this .updateInformation(universeServer);
072: }
073: return this .information;
074:
075: }
076:
077: //to refresh informations may be not up to date in getInformation()
078: public final void updateInformation(UniverseServer universeServer) {
079:
080: Socket socket;
081: ObjectOutputStream objectOutputStream;
082: ObjectInputStream objectInputStream;
083:
084: ControlRequest controlRequest;
085: ControlReply controlReply;
086:
087: //query distant server and fetch informations
088:
089: try {
090:
091: socket = new Socket(universeServer.getIP(), universeServer
092: .getPort(), this .getIP(), this .getPort());
093:
094: objectInputStream = new ObjectInputStream(socket
095: .getInputStream());
096: objectOutputStream = new ObjectOutputStream(socket
097: .getOutputStream());
098:
099: controlRequest = new ControlRequest(
100: ControlRequest.INFORMATION);
101: // send request
102: objectOutputStream.writeObject(controlRequest);
103:
104: // read response
105: try {
106:
107: controlReply = (ControlReply) objectInputStream
108: .readObject();
109:
110: if (controlReply.getReplyKind() != ControlReply.REFUSED) {
111:
112: this .information = (Hashtable) controlReply
113: .getObjectValue();
114:
115: } else {
116:
117: this .information = new Hashtable();
118:
119: }
120:
121: } catch (ClassNotFoundException classNotFoundException) {
122: }
123:
124: objectOutputStream.flush();
125: objectInputStream.close();
126: objectOutputStream.close();
127:
128: socket.close();
129:
130: } catch (IOException iOException) {
131: }
132:
133: }
134:
135: public final InetAddress getIP() {
136:
137: return this .IP;
138:
139: }
140:
141: public final void setIP(InetAddress IP) {
142:
143: this .IP = IP;
144:
145: }
146:
147: public final int getPort() {
148:
149: return this .port;
150:
151: }
152:
153: public final void setPort(int port) {
154:
155: this.port = port;
156:
157: }
158:
159: }
|