This commit is contained in:
2024-08-07 09:16:27 -04:00
parent fdfadd5c7e
commit 5f971cf684
5200 changed files with 731717 additions and 0 deletions

203
java/JCHAT/IOManager.java Normal file
View File

@@ -0,0 +1,203 @@
import java.net.*;
import java.io.*;
public class IOManager
{
public static final int OkResult=220;
public static final int ErrorResult=500;
private final int MaxNetworkPacket=1024;
private final int InvalidPort=-1;
private SocketControl mTCPSocket=null;
private boolean mIsLoggedIn=false;
private StringArray mAckResponseStrings;
public IOManager()
{
mAckResponseStrings=new StringArray();
mAckResponseStrings.insert("220");
}
public void shutdown()
{
if(!mTCPSocket.isConnected())return;
if(isLoggedIn())quit();
try{mTCPSocket.closeSocket();}
catch(IOException exception){return;}
}
public boolean isConnected()
{
if(mTCPSocket==null||!mTCPSocket.isConnected())return false;
return true;
}
private void isLoggedIn(boolean isLoggedIn)
{
mIsLoggedIn=isLoggedIn;
}
public boolean isLoggedIn()
{
return mIsLoggedIn;
}
public boolean connect(String strHost,int port)
{
int bytesRead;
byte streamBytes[];
int clientPort;
String strLine=new String();
if(isConnected())return false;
streamBytes=new byte[MaxNetworkPacket];
InetAddress inetAddress=null;
SocketControl socket=null;
if(0!=strHost.length())
{
try{inetAddress=InetAddress.getByName(strHost);}
catch(UnknownHostException exception){return false;}
try{socket=new SocketControl(inetAddress,port);}
catch(IOException exception){return false;}
catch(SecurityException exception){return false;}
}
else
{
try{socket=new SocketControl("",port);}
catch(IOException exception){return false;}
catch(SecurityException exception){return false;}
}
if(!socket.isConnected())return false;
strLine=socket.readLine();
if(0==strLine.length())return false;
clientPort=getPort(strLine);
if(InvalidPort==clientPort)return false;
socket.writeLine("OK");
try{socket.closeSocket();}
catch(IOException exception){return false;}
if(0!=strHost.length())
{
try{inetAddress=InetAddress.getByName(strHost);}
catch(UnknownHostException exception){return false;}
try{mTCPSocket=new SocketControl(inetAddress,clientPort);}
catch(IOException exception){return false;}
}
else
{
try{mTCPSocket=new SocketControl("",clientPort);}
catch(IOException exception){return false;}
}
strLine=mTCPSocket.readLine();
return isConnected();
}
public boolean advise(String strAddress,int port)
{
String strRequest=null;
if(!isConnected())return false;
strRequest=new String("ADVISE(")+new String(strAddress)+new String(",")+String.valueOf(port)+new String(")");
mTCPSocket.writeLine(strRequest);
strRequest=mTCPSocket.readLine();
return true;
}
private String readLine(InputStream inputStream)
{
byte streamByte[];
String strLine=new String();
strLine=new String();
while(true)
{
streamByte=new byte[1];
try{inputStream.read(streamByte);}
catch(IOException exception){break;}
if(13==streamByte[0])continue;
else if(10==streamByte[0])break;
strLine+=new String(streamByte);
}
return strLine;
}
private boolean writeLine(String strLine,OutputStream outputStream)
{
if(0==strLine.length())return false;
strLine+=new String("\r\n");
byte streamData[]=strLine.getBytes();
try{outputStream.write(streamData);}
catch(IOException exception){return false;}
return true;
}
private int getPort(String strLine)
{
String strPort;
int strIndex;
int port;
strIndex=strLine.length()-1;
port=InvalidPort;
strPort=new String();
if(strIndex<0)return -1;
while(true)
{
if(strIndex<0)break;
if(' '==strLine.charAt(strIndex))break;
strIndex--;
}
strIndex++;
if(strIndex<0)return port;
strPort=strLine.substring(strIndex);
return Integer.parseInt(strPort);
}
private boolean isInResponse(String responseString,StringArray responseStrings)
{
if(0==responseString.length())return false;
for(int index=0;index<responseStrings.size();index++)
{
if(responseString.equals(responseStrings.getAt(index)))return true;
}
return false;
}
public boolean user(String strUserName,StringArray receiveStrings)
{
receiveStrings.clear();
if(!isConnected())return false;
String strLine=new String("USER(")+strUserName+new String(")");
mTCPSocket.writeLine(strLine);
if(!mTCPSocket.receive(receiveStrings,mAckResponseStrings))return false;
isLoggedIn(true);
return isLoggedIn();
}
public boolean who(StringArray userList)
{
StringArray responseLines=new StringArray();
userList.clear();
if(!isConnected())return false;
String strLine=new String("WHO");
mTCPSocket.writeLine(strLine);
if(!mTCPSocket.receive(responseLines,mAckResponseStrings))return false;
for(int index=1;index<responseLines.size()-1;index++)
userList.insert(responseLines.getAt(index).substring(4,responseLines.getAt(index).length()));
return true;
}
public boolean quit()
{
if(!isConnected()||!isLoggedIn())return false;
String strLine=new String("QUIT");
mTCPSocket.writeLine(strLine);
strLine=mTCPSocket.readLine();
return true;
}
public boolean talk(String strLine)
{
if(!isConnected()||0==strLine.length())return false;
String strString=new String("TALK(")+strLine+new String(")");
mTCPSocket.writeLine(strString);
strLine=mTCPSocket.readLine();
return true;
}
public String version()
{
String strVersion=new String();
String strLine=new String();
if(!isConnected())return strVersion;
mTCPSocket.writeLine("VERSION");
strLine=mTCPSocket.readLine();
if(mTCPSocket.OkResult!=mTCPSocket.getResultCode(strLine))return strVersion;
strVersion=mTCPSocket.getResult(strLine);
return strVersion;
}
};