📄 gtavirtualplayertcp.java
字号:
/*
* Created on Jan 26, 2006
*
* TODO To change the template for this generated file go to
* Window - Preferences - Java - Code Style - Code Templates
*/
package org.GTADS.proxy;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
/**
* @author Administrator
*
* TODO To change the template for this generated type comment go to
* Window - Preferences - Java - Code Style - Code Templates
*/
public class GTAVirtualPlayerTCP extends Thread {
public static GTAVirtualPlayerTCP instance;
private static ServerSocket virtualClientListen;
private static Socket virtualClientConnection;
private static Socket virtualGameConnection;
private int listenPort = 2300;
private byte[] tcpData = new byte[10000];
private boolean initial = true;
private int count = 0;
public static GTAVirtualPlayerTCP getInstance(){
if (instance == null){
instance = new GTAVirtualPlayerTCP();
}
return instance;
}
public static void clearInstance(){
if (instance != null){
instance.closeAllSockets();
instance.stop();
instance = null;
}
}
public GTAVirtualPlayerTCP(){
start();
}
public void run(){
try {
virtualClientListen = new ServerSocket(listenPort);
virtualClientConnection = virtualClientListen.accept();
System.out.println("Virtual Player Connection Triggered");
while (true){
// Recieve and send data from Virtual Player to real player via proxy
tcpData = new byte[3000];
DataInputStream din = new DataInputStream(virtualClientConnection.getInputStream());
int p = din.read(tcpData);
// count++;
//if (count == 3){
//if (!Proxy.matchesString(tcpData,"play)")){
//continue;
//}
//}
Proxy.displayByte(Proxy.getByteOffset(tcpData,0,p));
Proxy.getInstance().sendTCPHostData(Proxy.getByteOffset(tcpData,0,p));
System.out.println("Sending data through proxy");
//virtualClientConnection.close();
}
} catch (IOException ioe){
// TODO: Add correct error
return;
}
}
public void sendTCPDataToGame(byte[] data) throws IOException {
DataOutputStream dout = new DataOutputStream(virtualClientConnection.getOutputStream());
dout.write(data);
System.out.println("Sending data to local game");
}
public void processVPlayerTCP(byte[] data) throws IOException {
// When an incoming connection for a player happens
// Handle it here
if (virtualGameConnection == null){
//virtualGameConnection.close();
// initial = false;
virtualGameConnection = new Socket(InetAddress.getByName("localhost"), 2301);
}
DataOutputStream dout = new DataOutputStream(virtualGameConnection.getOutputStream());
dout.write(data,0,data.length);
dout.flush();
}
private boolean checkInitPlayData(byte[] data) {
boolean isSuccess = true;
char[] gameInit = Proxy.gameInitByte;
if (gameInit.length == data.length){
for (int i = 0; i<gameInit.length; i++){
if ((byte)gameInit[i] != data[i])
isSuccess = false;
}
}
return isSuccess;
}
public void closeAllSockets() {
try {
if (virtualClientConnection != null)
virtualClientConnection.close();
if (virtualClientListen != null)
virtualClientListen.close();
if (virtualGameConnection != null)
virtualGameConnection.close();
} catch (IOException ioe){
return;
}
}
public static byte[] readBytes(DataInputStream din) throws IOException{
byte[] temp = new byte[1000];
byte[] buffer = new byte[1000];
int p = 0;
while (din.available() <= 0){
}
p = din.available();
temp = new byte[p];
for (int i = 0; i < temp.length;i++){
}
p = din.read(temp);
din.readByte();
temp = Proxy.getByteOffset(temp,0,p);
System.out.println("Length of initial incoming packet: " + temp.length);
while (din.available() > 0){
p = din.read(buffer);
temp = Proxy.byteCat(temp, Proxy.getByteOffset(buffer,0,p));
}
System.out.println("Length of total incoming packet: " + temp.length);
return temp;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -