📄 chatclient.java
字号:
/********* LIST UserName;UserName; RFC Coding***********/
if(ServerData.startsWith("LIST"))
{
Tokenizer = new StringTokenizer(ServerData.substring(5),";");
/********Update the Information Label *********/
TotalUserCount = Tokenizer.countTokens();
UpdateInformationLabel();
/**********Add User Item into User Canvas *********/
tappanel.UserCanvas.ClearAll();
while(Tokenizer.hasMoreTokens())
{
tappanel.UserCanvas.AddListItemToMessageObject(Tokenizer.nextToken());
}
messagecanvas.ClearAll();
messagecanvas.AddMessageToMessageObject("Welcome To The "+UserRoom+" Room!",MESSAGE_TYPE_JOIN);
}
/*********Room Rfc ********/
if( ServerData.startsWith("ROOM"))
{
/********** Loading Room List in to Room Canvas **************/
Tokenizer = new StringTokenizer(ServerData.substring(5),";");
UserRoom = Tokenizer.nextToken();
UpdateInformationLabel();
/**********Add User Item into User Canvas *********/
tappanel.RoomCanvas.ClearAll();
tappanel.RoomCanvas.AddListItemToMessageObject(UserRoom);
while(Tokenizer.hasMoreTokens())
{
tappanel.RoomCanvas.AddListItemToMessageObject(Tokenizer.nextToken());
}
}
/********** ADD RFC *********/
if(ServerData.startsWith("ADD"))
{
/********Update the Information Label *********/
TotalUserCount++;
UpdateInformationLabel();
/**********Add User Item into User Canvas *********/
SplitString = ServerData.substring(5);
EnablePrivateWindow(SplitString);
tappanel.UserCanvas.AddListItemToMessageObject(SplitString);
messagecanvas.AddMessageToMessageObject(SplitString + " joins chat...",MESSAGE_TYPE_JOIN);
}
/*********If User Name Alread Exists **********/
if (ServerData.startsWith("EXIS"))
{
messagecanvas.AddMessageToMessageObject(" User Name Already Exists... Try Again With Some Other Name!",MESSAGE_TYPE_ADMIN);
thread = null;
QuitConnection(QUIT_TYPE_NULL);
}
/******** REMOVE User RFC Coding **********/
if (ServerData.startsWith("REMO"))
{
SplitString = ServerData.substring(5);
tappanel.UserCanvas.RemoveListItem(SplitString);
RemoveUserFromPrivateChat(SplitString);
messagecanvas.AddMessageToMessageObject(SplitString+" has been logged Out from Chat!",MESSAGE_TYPE_LEAVE );
/*****Update the Information Label ********/
TotalUserCount--;
UpdateInformationLabel();
}
/******** MESS RFC Coding Starts **********/
if( ServerData.startsWith("MESS"))
{
/**** Chk whether ignored user *********/
if(!(tappanel.UserCanvas.IsIgnoredUser(ServerData.substring(5,ServerData.indexOf(":")))))
messagecanvas.AddMessageToMessageObject(ServerData.substring(5),MESSAGE_TYPE_DEFAULT);
}
/***** KICK RFC Starts ***********/
if (ServerData.startsWith("KICK"))
{
messagecanvas.AddMessageToMessageObject("You are Kicked Out From Chat for flooding the message!",MESSAGE_TYPE_ADMIN);
thread = null;
QuitConnection(QUIT_TYPE_KICK);
}
/***** INKI RFC (Information about kicked off User *********/
if( ServerData.startsWith("INKI"))
{
SplitString = ServerData.substring(5);
tappanel.UserCanvas.RemoveListItem(SplitString);
RemoveUserFromPrivateChat(SplitString);
messagecanvas.AddMessageToMessageObject(SplitString+" has been kicked Out from Chat by the Administrator!",MESSAGE_TYPE_ADMIN );
/*****Update the Information Label ********/
TotalUserCount--;
UpdateInformationLabel();
}
/***** Change Room RFC **********/
if( ServerData.startsWith("CHRO"))
{
UserRoom = ServerData.substring(5);
}
/********** Join Room RFC *************/
if( ServerData.startsWith("JORO"))
{
SplitString = ServerData.substring(5);
tappanel.UserCanvas.AddListItemToMessageObject(SplitString);
/*****Update the Information Label ********/
TotalUserCount++;
UpdateInformationLabel();
messagecanvas.AddMessageToMessageObject(SplitString + " joins chat...",MESSAGE_TYPE_JOIN);
}
/***********Leave Room RFC **********/
if( ServerData.startsWith("LERO"))
{
SplitString = ServerData.substring(5,ServerData.indexOf("~"));
tappanel.UserCanvas.RemoveListItem(SplitString);
messagecanvas.AddMessageToMessageObject(SplitString+" has leaves "+UserRoom+" Room and join into "+ServerData.substring(ServerData.indexOf("~")+1)+" Room",MESSAGE_TYPE_ADMIN);
/*****Update the Information Label ********/
TotalUserCount--;
UpdateInformationLabel();
}
/********** Room Count RFC ********/
if( ServerData.startsWith("ROCO"))
{
SplitString = ServerData.substring(5,ServerData.indexOf("~"));
tappanel.TxtUserCount.setText("Total Users in "+SplitString+" : "+ServerData.substring(ServerData.indexOf("~")+1));
}
/******* Private Message RFC **********/
if( ServerData.startsWith("PRIV"))
{
SplitString = ServerData.substring(5,ServerData.indexOf(":"));
/**** Chk whether ignored user *********/
if(!(tappanel.UserCanvas.IsIgnoredUser(SplitString)))
{
boolean PrivateFlag = false;
for(G_ILoop = 0; G_ILoop < PrivateWindowCount;G_ILoop++)
{
if(privatewindow[G_ILoop].UserName.equals(SplitString))
{
privatewindow[G_ILoop].AddMessageToMessageCanvas(ServerData.substring(5));
privatewindow[G_ILoop].show();
privatewindow[G_ILoop].requestFocus();
PrivateFlag = true;
break;
}
}
if(!(PrivateFlag))
{
if(PrivateWindowCount >= MAX_PRIVATE_WINDOW)
{
messagecanvas.AddMessageToMessageObject("You are Exceeding private window limit! So you may lose some message from your friends!",MESSAGE_TYPE_ADMIN);
}
else
{
privatewindow[PrivateWindowCount++] = new PrivateChat(this,SplitString);
privatewindow[PrivateWindowCount-1].AddMessageToMessageCanvas(ServerData.substring(5));
privatewindow[PrivateWindowCount-1].show();
privatewindow[PrivateWindowCount-1].requestFocus();
}
}
}
}
}catch(Exception _Exc) { messagecanvas.AddMessageToMessageObject(_Exc.getMessage(),MESSAGE_TYPE_ADMIN);QuitConnection(QUIT_TYPE_DEFAULT); }
}
}
/***** Enable the Private Chat when the End User logged out****/
private void EnablePrivateWindow(String ToUserName)
{
for(G_ILoop = 0; G_ILoop < PrivateWindowCount; G_ILoop++)
{
if(privatewindow[G_ILoop].UserName.equals(ToUserName))
{
privatewindow[G_ILoop].messagecanvas.AddMessageToMessageObject(ToUserName + " is Currently Online!",MESSAGE_TYPE_ADMIN);
privatewindow[G_ILoop].EnableAll();
return;
}
}
}
/***** Disable the Private Chat when the End User logged out****/
private void RemoveUserFromPrivateChat(String ToUserName)
{
for(G_ILoop = 0; G_ILoop < PrivateWindowCount; G_ILoop++)
{
if(privatewindow[G_ILoop].UserName.equals(ToUserName))
{
privatewindow[G_ILoop].messagecanvas.AddMessageToMessageObject(ToUserName + " is Currently Offline!",MESSAGE_TYPE_ADMIN);
privatewindow[G_ILoop].DisableAll();
return;
}
}
}
/*******Function To Send Private Message To Server ***********/
protected void SentPrivateMessageToServer(String Message, String ToUserName)
{
SendMessageToServer("PRIV "+ToUserName+"~"+UserName+": "+Message);
}
/******* Function To Remove Private Window ***************/
protected void RemovePrivateWindow(String ToUserName)
{
int m_UserIndex = 0;
for(G_ILoop = 0; G_ILoop < PrivateWindowCount; G_ILoop++)
{
m_UserIndex++;
if(privatewindow[G_ILoop].UserName.equals(ToUserName)) break;
}
for(int m_iLoop = m_UserIndex;m_iLoop < PrivateWindowCount; m_iLoop++)
{
privatewindow[m_iLoop] = privatewindow[m_iLoop+1];
}
PrivateWindowCount--;
}
/********* Function to Change Room *******/
protected void ChangeRoom()
{
if(tappanel.RoomCanvas.SelectedUser.equals(""))
{
messagecanvas.AddMessageToMessageObject("Invalid Room Selection!",MESSAGE_TYPE_ADMIN);
return;
}
if(tappanel.RoomCanvas.SelectedUser.equals(UserRoom))
{
messagecanvas.AddMessageToMessageObject("You are already in that ROOM!",MESSAGE_TYPE_ADMIN);
return;
}
SendMessageToServer("CHRO "+UserName+"~"+tappanel.RoomCanvas.SelectedUser);
}
/******* Function to Send a RFC for Get a Room User Count ********/
protected void GetRoomUserCount(String RoomName)
{
SendMessageToServer("ROCO "+RoomName);
}
/******** Function to Set the Image Name into Text Field ************/
protected void AddImageToTextField(String ImageName)
{
if(TxtMessage.getText()==null || TxtMessage.getText().equals(""))
TxtMessage.setText("~~"+ImageName+" ");
else
TxtMessage.setText(TxtMessage.getText()+" "+"~~"+ImageName+" ");
}
/*********Function to Destroy all the Objects********/
private void QuitConnection(int QuitType)
{
if(socket != null)
{
try {
if (QuitType == QUIT_TYPE_DEFAULT)
SendMessageToServer("QUIT "+UserName+"~"+UserRoom);
if (QuitType == QUIT_TYPE_KICK)
SendMessageToServer("KICK "+UserName+"~"+UserRoom);
socket.close();
socket = null;
tappanel.UserCanvas.ClearAll();
}catch(IOException _IoExc) { }
}
if(thread != null)
{
thread.stop();
thread = null;
}
DisableAll();
StartFlag = false;
SetAppletStatus("ADMIN: CONNECTION TO THE SERVER CLOSED.");
}
/***** Function To Disable All Components ********/
private void DisableAll()
{
TxtMessage.setEnabled(false);
CmdSend.setEnabled(false);
tappanel.enable(false);
disconnectitem.setEnabled(false);
loginitem.setEnabled(true);
UserName = "";
UserRoom = "";
TotalUserCount = 0;
}
/***** Function To Enable All Components ********/
private void EnableAll()
{
TxtMessage.setEnabled(true);
CmdSend.setEnabled(true);
tappanel.enable(true);
disconnectitem.setEnabled(true);
loginitem.setEnabled(false);
}
/*******Diconnect Chat ********/
private void DisconnectChat()
{
if(socket != null)
{
messagecanvas.AddMessageToMessageObject("CONNECTION TO THE SERVER CLOSED",MESSAGE_TYPE_ADMIN);
QuitConnection(QUIT_TYPE_DEFAULT);
}
}
/*********Setting the AppletStatus********/
private void SetAppletStatus(String Message)
{
if (messagecanvas != null)
messagecanvas.AddMessageToMessageObject(Message,MESSAGE_TYPE_ADMIN);
}
public static void main(String args[]) {
ChatClient mainFrame = new ChatClient();
}
/**************Global Variable Declarations*****************/
String UserName,UserRoom,ServerName,AppletStatus,ChatLogo,BannerName,ProxyHost,ServerData,RoomList,SplitString;
Image ImgLogo,ImgBanner;
int ServerPort,ProxyPort,IconCount,TotalUserCount,G_ILoop;
boolean StartFlag,IsProxy;
Socket socket;
DataInputStream datainputstream;
DataOutputStream dataoutputstream;
Color[] ColorMap;
Dimension dimension;
MediaTracker tracker;
Label InformationLabel;
StringBuffer stringbuffer;
Image[] IconArray;
MessageCanvas messagecanvas;
ScrollView MessageScrollView;
Thread thread;
StringTokenizer Tokenizer;
TapPanel tappanel;
TextField TxtMessage;
Button CmdSend,CmdExit;
Font TextFont;
protected PrivateChat[] privatewindow;
protected int PrivateWindowCount;
InformationDialog dialog;
Toolkit toolkit;
MenuItem loginitem;
MenuItem disconnectitem;
MenuItem seperatoritem;
MenuItem quititem,aboutitem;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -