⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 clientconnectionhandler.java

📁 是一款国外的网络游戏平台的源码*不是类似浩方那种虚拟局域网技术
💻 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 + -