blob: 191492f767ae7fcf40e921d5655c021fcbe16589 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
|
/**************************************************************************
* EntityProxyFactory.java
*
* $Revision: 1.3 $
* $Date: 2005/05/25 12:11:44 $
*
* Copyright (C) 2001 CERN - European Organization for Nuclear Research
* All rights reserved.
**************************************************************************/
package com.c2kernel.entity.proxy;
import java.io.*;
import java.net.Socket;
import com.c2kernel.common.InvalidDataException;
import com.c2kernel.utils.Logger;
public class ProxyServerConnection extends Thread
{
public boolean serverIsActive = true;
// proxy client details
String serverName;
int serverPort;
Socket serverConnection;
EntityProxyManager manager;
// for talking to the proxy server
PrintWriter serverStream;
boolean listening = false;
static boolean isServer = false;
/**
* Create an entity proxy manager to listen for proxy events and reap unused proxies
*/
public ProxyServerConnection(String host, int port, EntityProxyManager manager)
{
Logger.msg(5, "ProxyServerConnection - Initialising connection to "+host+":"+port);
serverName = host;
serverPort = port;
this.manager = manager;
listening = true;
start();
}
public void run() {
Thread.currentThread().setName("Proxy Client Connection Listener to "+serverName+":"+serverPort);
while (listening) {
try {
if (serverConnection == null) connect();
if (serverConnection != null) {
BufferedReader request = new BufferedReader(new InputStreamReader(serverConnection.getInputStream()));
String input = null;
ProxyMessage thisMessage;
while (listening && serverConnection != null) {
try {
input = request.readLine();
thisMessage = new ProxyMessage(input);
thisMessage.setServer(serverName);
manager.processMessage(thisMessage);
} catch (InterruptedIOException ex) { // timeout - send a ping
sendMessage(ProxyMessage.pingMessage);
} catch (InvalidDataException ex) { // invalid proxy message
if (input != null)
Logger.error("EntityProxyManager - Invalid proxy message: "+input);
}
}
}
} catch (IOException ex) {
Logger.error("ProxyServerConnection - Disconnected from "+serverName+":"+serverPort);
try {
serverStream.close();
serverConnection.close();
} catch (IOException e1) { }
serverStream = null;
serverConnection = null;
}
}
if (serverStream != null) {
try {
Logger.msg(1, "Disconnecting from proxy server on "+serverName+":"+serverPort);
serverStream.println(ProxyMessage.byeMessage.toString());
serverStream.close();
serverConnection.close();
serverConnection = null;
} catch (Exception e) {
Logger.error("Error disconnecting from proxy server.");
}
}
}
public void connect() {
Logger.msg(3, "ProxyServerConnection - connecting to proxy server on "+serverName+":"+serverPort);
try {
serverConnection = new Socket(serverName, serverPort);
serverConnection.setKeepAlive(true);
serverIsActive = true;
serverConnection.setSoTimeout(5000);
serverStream = new PrintWriter(serverConnection.getOutputStream(), true);
Logger.msg("Connected to proxy server on "+serverName+":"+serverPort);
manager.resubscribe(this);
} catch (Exception e) {
Logger.msg(3, "Could not connect to proxy server. Retrying in 5s");
try { Thread.sleep(5000); } catch (InterruptedException ex) { }
serverStream = null;
serverConnection = null;
serverIsActive = false;
}
}
public void shutdown() {
Logger.msg("Proxy Client: flagging shutdown.");
listening = false;
}
/**
* @param sub
*/
public void sendMessage(ProxyMessage sub) {
if (serverStream != null)
serverStream.println(sub);
}
}
|