📄 clientconnectionhandler.java
字号:
/*
* Created on Jun 5, 2005
*
* TODO To change the template for this generated file go to
* Window - Preferences - Java - Code Style - Code Templates
*/
package org.GTADS.client;
import java.net.*;
import java.io.*;
import org.GTADS.client.preferences.PreferencesManager;
import org.GTADS.messenger.MessageAdapter;
import org.GTADS.protocol.MetaData;
import org.GTADS.usermanager.*;
/**
* @author Administrator
*
* TODO To change the template for this generated type comment go to
* Window - Preferences - Java - Code Style - Code Templates
*/
public class ClientConnectionHandler {
private String username;
private String password;
private String serverAddress;
private Integer serverPort;
public static boolean isNewAcct = false;
public ClientConnectionHandler(String user, String password, String server){
username = user;
this.password = password;
serverAddress = getServerFromString(server);
try { serverPort = getPortFromString(server);}
catch (NumberFormatException ne)
{
// Error on port
serverPort = null;
}
finally {
if (username.equalsIgnoreCase(MetaData.NEW_USER_ACCT)){
isNewAcct = true;
initNewUser();
}
else
init();
}
}
private void init() {
if (serverPort == null)
serverPort = new Integer(7000);
if (username.equals(""))
DialogManager.ErrorDialog("No Username Specified");
else if (password.equals(""))
DialogManager.ErrorDialog("Blank Password");
else if (serverAddress == null)
DialogManager.ErrorDialog("Invalid Servername");
else {
try {
// Connect to Server
connectToServer();
} catch (IOException e){
ClientLoginScreen.getInstance().show();
ClientLoginScreen.getInstance().writeStatusLabel("Error Connecting to " + serverAddress);
DialogManager.ErrorDialog("Could not connect to " + serverAddress +
" on port " + serverPort);
}
}
}
private void initNewUser() {
if (serverPort == null)
serverPort = new Integer(7000);
try {
// Connect to Server
connectToServer();
} catch (IOException e){
ClientLoginScreen.getInstance().show();
ClientLoginScreen.getInstance().writeStatusLabel("Error Connecting to " + serverAddress);
DialogManager.ErrorDialog("Could not connect to " + serverAddress +
" on port " + serverPort);
}
}
public static String getServerFromString(String serverPort){
String[] connectionString = new String[2];
if (serverPort.equals(""))
return null;
connectionString = serverPort.split(":");
if (connectionString[0] != null)
return connectionString[0];
else
return null;
}
public static Integer getPortFromString(String serverPort) throws NumberFormatException{
String[] connectionString = new String[2];
Integer portNumber = new Integer(0);
if (serverPort == null)
return null;
connectionString = serverPort.split(":");
if (connectionString.length > 1 && connectionString[1] != null) {
portNumber = Integer.valueOf(connectionString[1]);
return portNumber;
}
else
return null;
}
private void connectToServer () throws IOException{
if (DSChatClient.ClientSocket != null){
DSChatClient.ClientSocket.close();
DSChatClient.ClientSocket = null;
}
DSChatClient.ClientSocket = new Socket(serverAddress, serverPort.intValue());
int loginSuccess;
if (username.equalsIgnoreCase(MetaData.NEW_USER_ACCT)){
loginSuccess = AuthenticationManager.loginClient(DSChatClient.ClientSocket, NewUserDialog.getInstance().getNewUser(),
NewUserDialog.getInstance().getNewPassword());
}
else {
loginSuccess = AuthenticationManager.loginClient(DSChatClient.ClientSocket, username, password);
}
if (loginSuccess == AuthenticationManager.LOGIN_FAILED){
DSChatClient.ClientSocket.close();
if (username.equalsIgnoreCase(MetaData.NEW_USER_ACCT)){
NewUserDialog.clearInstance();
DialogManager.ErrorDialog("New user creation failed");
}
else {
DialogManager.ErrorDialog("Login Failed for User " + username);
ClientLoginScreen.getInstance().writeStatusLabel("Login Failed");
}
return;
}
else if (loginSuccess == AuthenticationManager.MAXED_OUT){
DSChatClient.ClientSocket.close();
DialogManager.ErrorDialog("Server full please try again later");
ClientLoginScreen.getInstance().writeStatusLabel("Full Server");
return;
}
else if (loginSuccess == AuthenticationManager.NEW_USER_SUCCESS){
ClientLoginScreen.getInstance().usernameField.setText(NewUserDialog.getInstance().getNewUser());
ClientLoginScreen.getInstance().passwordField.setText(NewUserDialog.getInstance().getNewPassword());
NewUserDialog.clearInstance();
DialogManager.SuccessDialog("New User " + ClientLoginScreen.getInstance().usernameField.getText() + " created!");
return;
}
else if (loginSuccess == AuthenticationManager.NEW_USER_DISABLED){
NewUserDialog.clearInstance();
DialogManager.ErrorDialog("Server is not currently accepting new users");
return;
}
else if (loginSuccess == AuthenticationManager.NEW_USER_FAIL){
NewUserDialog.clearInstance();
DialogManager.ErrorDialog("New user creation failed");
return;
}
else if (loginSuccess == AuthenticationManager.USER_BANNED){
DialogManager.ErrorDialog("You have been banned from " + serverAddress);
return;
}
// Check if proxy port is open: Client side
if (clientProxyCheck()){
MetaData proxyOkHeader = new MetaData("NULL",MetaData.GENERIC,MetaData.PROXY_CHECK);
MessageAdapter.sendData(null,DSChatClient.ClientSocket,proxyOkHeader,MetaData.PROXY_SUCCESS);
}
ClientLoginScreen.getInstance().hide();
DSChatClient.clientUser = new User(username);
ChatWindowDialog.createInstance(username);
FriendsListWindow.clearInstance();
ChatroomListingWindow.clearInstance();
//ChatWindowDialog chatDialog = new ChatWindowDialog(username);
new ClientListenHandler(ChatWindowDialog.getInstance());
//DSChatClient.ClientSocket.close();
}
private boolean clientProxyCheck() throws IOException{
boolean isPortOpen = false;
String incomingString;
DatagramSocket proxyReceiveCheck = new DatagramSocket();
try {
proxyReceiveCheck = new DatagramSocket(PreferencesManager.getInstance().getProxyPort());
DataInputStream din = new DataInputStream(DSChatClient.ClientSocket.getInputStream());
incomingString = din.readLine();
if (incomingString.split(",").length >= 4){
if (incomingString.split(",")[2].equalsIgnoreCase(MetaData.PROXY_CHECK)){
MetaData sendWhenReadyHeader = new MetaData("NULL", MetaData.GENERIC, MetaData.PROXY_CHECK);
MessageAdapter.sendData(null, DSChatClient.ClientSocket,sendWhenReadyHeader,
PreferencesManager.getInstance().getProxyPort() + "");
// TODO: Change from hardcoded 8000 to something in preferences
byte[] b = new byte[1];
b[0] = 0;
proxyReceiveCheck.setSoTimeout(10000);
proxyReceiveCheck.receive(new DatagramPacket(b,1));
if (b[0] == 1){
isPortOpen = true;
}
proxyReceiveCheck.close();
}
}
} catch (SocketException se){
proxyReceiveCheck.close();
} catch (InterruptedIOException ioe){
proxyReceiveCheck.close();
}
return isPortOpen;
}
public static boolean clientProxyCheck(boolean loggedIn) throws IOException{
boolean isPortOpen = false;
String incomingString;
DatagramSocket proxyReceiveCheck = new DatagramSocket(PreferencesManager.getInstance().getProxyPort());
try {
MetaData sendWhenReadyHeader = new MetaData(DSChatClient.clientUser.getUsername(), MetaData.GENERIC, MetaData.PROXY_CHECK);
MessageAdapter.sendData(null, DSChatClient.ClientSocket,sendWhenReadyHeader,
PreferencesManager.getInstance().getProxyPort() + "");
// TODO: Change from hardcoded 8000 to something in preferences
byte[] b = new byte[1];
b[0] = 0;
proxyReceiveCheck.setSoTimeout(10000);
proxyReceiveCheck.receive(new DatagramPacket(b,1));
if (b[0] == 1){
isPortOpen = true;
}
proxyReceiveCheck.close();
} catch (SocketException se){
proxyReceiveCheck.close();
} catch (InterruptedIOException ioe){
proxyReceiveCheck.close();
}
return isPortOpen;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -