package client;
import java.applet.AudioClip;
import java.awt.Component;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.*;
import java.util.Hashtable;
import java.util.StringTokenizer;
import java.util.Timer;
import java.util.TimerTask;
import java.util.Vector;
import javax.swing.DefaultListModel;
import javax.swing.Icon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JOptionPane;
import javax.swing.ListCellRenderer;
import com.swtdesigner.SwingResourceManager;
public class Client extends Thread {
/*
* 好友登陆的提示筐
*/
private LoginPrompt loginPrompt;
/*
* 显示好友的好友列表的好友面板
*/
private ChatInterface chatInterface;
/*
* 父界面 主要用于让消息提示显示在父界面的中央
*/
private JFrame parentFrame;
/*
* 从服务端接受消息的输入流
*/
DataInputStream receiveFromServer;
/*
*给服务端发消息的输入流
*/
DataOutputStream sendToServer;
/*
* 当前打开的和好友聊天的界面
*/
public static Hashtable<Integer, TalkInterface> talkInterfaces;
/*
* 当前打开的和好友群聊的界面
*/
public static Hashtable<Integer, TalkInterface> grouptalkInterfaces;
/*
* 群聊界面 和 邀请群聊的好友的号码 建立起来的hashtable
*/
public static Hashtable<Integer, Integer> mapGrouptalkInterfaces;
/*
* 正在群聊的的界面的 ID
*/
public static Vector<Integer> groupTalkInterfaceIds;
/*
*存放已经关闭的群聊窗口的ID(群聊界面的ID号的分配时用)
* 分配id的步骤:
* 邀请着邀请时,如果tempGroupTalkInterfaceIds为空,则在groupTalkInterfaceIds新添加一个ID,分配给该界面.
* 如果tempGroupTalkInterfaceIds不为空,则将tempGroupTalkInterfaceIds最后一个ID分配给该界面
* 这样做主要是避免群聊窗口的Id过大
*/
public static Vector<Integer> tempGroupTalkInterfaceIds;
/*
* 该客户端用户的 号码
*/
public static Integer number;
/*
* 该用户的好友
*/
public static Hashtable<Integer, String> goodFriends; // 所有好友
/*
* 用户头像信息
*/
public static Hashtable<Integer, String> friendIcon;
/*
* 收到好友信息时,头像闪烁的定时器,提醒自己该好友给自己发送了消息.
*/
public static Hashtable<Integer, Timer> timerHashtable;
/*
* 好友对自己的留言
*/
public static Hashtable<Integer, Vector<String>> messengeOfFriends;
public Client(DataInputStream receiveFromServer,
DataOutputStream sendToServer, JFrame frame, Integer num) {
parentFrame = frame;
goodFriends = new Hashtable<Integer, String>();
friendIcon = new Hashtable<Integer, String>();
groupTalkInterfaceIds = new Vector<Integer>();
tempGroupTalkInterfaceIds = new Vector<Integer>();
mapGrouptalkInterfaces = new Hashtable<Integer, Integer>();
timerHashtable = new Hashtable<Integer,Timer>();
messengeOfFriends = new Hashtable<Integer, Vector<String>>();
this.receiveFromServer = receiveFromServer;
this.sendToServer = sendToServer;
talkInterfaces = new Hashtable<Integer, TalkInterface>();
grouptalkInterfaces = new Hashtable<Integer, TalkInterface>();
number = num;
}
public void run() {
while (true) {
try {
String messengeFromServer = receiveFromServer.readUTF();
StringTokenizer messengeST = new StringTokenizer(
messengeFromServer, "@");
String startWord = messengeST.nextToken();
String nextWord = messengeST.nextToken();
/*
* 别的用户登陆
*/
if (startWord.equals("Login")) {
Integer number = new Integer(nextWord);
loginPrompt = new LoginPrompt(parentFrame);
loginPrompt.setVisible(true);
loginPrompt.label_1
.setText(goodFriends.get(number) + "上线了");
}
/*
* 自己登陆成功
*/
else if (startWord.equals("Password")
&& nextWord.equals("Right")) {
}
/*
* 密码有误
*/
else if (startWord.equals("Password")
&& nextWord.equals("Error")) {
JOptionPane.showMessageDialog(parentFrame, "密码错误", "连接失败",
JOptionPane.ERROR_MESSAGE);
}
/*
* 得到好友列表
*/
else if (startWord.equals("Friends")) {
Integer friendNumber = new Integer(nextWord);
String friendName = messengeST.nextToken();
String icon = messengeST.nextToken();
friendIcon.put(friendNumber, icon);
goodFriends.put(friendNumber, friendName);
} else if (startWord.equals("FriendsAll")) {
chatInterface = new ChatInterface(sendToServer);
chatInterface.setTitle(goodFriends.get(number));
chatInterface.setVisible(true);
parentFrame.dispose();
}
/*
* 收到好友消息
*/
else if (startWord.equals("Messeng")) {
Integer messengerNumber = new Integer(nextWord);
String messengerName = goodFriends.get(messengerNumber);
/*
* 收到消息的声音提示
*/
URL file = getClass().getResource("chimes.wav"); //声音文件2
AudioClip sound = java.applet.Applet.newAudioClip(file); //声音剪辑对象1
sound.play();
TalkInterface talkInterface = talkInterfaces.get(messengerNumber);
if (talkInterface == null) {
//选中那个好友
DefaultListModel listModel = chatInterface.listModel;
int index = listModel.indexOf(messengerNumber + "@"
+ messengerName + "@"
+ friendIcon.get(messengerNumber));
if(timerHashtable.get(messengerNumber) == null){
TaskMessenge timeTask = new TaskMessenge(index);
Timer timer = new Timer();
timer.schedule(timeTask, 0, 500);
timerHashtable.put(messengerNumber, timer);
}
if(messengeOfFriends.get(messengerNumber) == null){
Vector<String> messenge = new Vector<String>();
messenge.add(messengeST.nextToken());
messengeOfFriends.put(messengerNumber, messenge);
}else{
messengeOfFriends.get(messengerNumber).add(messengeST.nextToken());
}
} else {
talkInterfaces.get(messengerNumber).textPane.setText(talkInterface.textPane.getText()
+ messengerName
+ messengeST.nextToken() + "\n");
talkInterfaces.get(messengerNumber).textPane.setSelectionStart(talkInterface.textPane
.getText().length());
}
}
/*
* 被邀情群聊
*/
else if (startWord.equals("GroupTalkInvite")) {
TalkInterface talkInterface = new TalkInterface(
sendToServer);
Integer groupTalkInterfaceId;
if (tempGroupTalkInterfaceIds.isEmpty()) {
groupTalkInterfaceId = groupTalkInterfaceIds.size();
groupTalkInterfaceIds.add(Client.groupTalkInterfaceIds
.size());
} else {
groupTalkInterfaceId = tempGroupTalkInterfaceIds
.lastElement();
groupTalkInterfaceIds.add(tempGroupTalkInterfaceIds
.lastElement());
tempGroupTalkInterfaceIds
.remove(tempGroupTalkInterfaceIds.size() - 1);
}
talkInterface.groupTalkInterfaceId = groupTalkInterfaceId;
grouptalkInterfaces
.put(groupTalkInterfaceId, talkInterface);
Integer numberOfInviterWindowId = new Integer(messengeST
.nextToken());
talkInterface.inviterNumber = numberOfInviterWindowId;
mapGrouptalkInterfaces.put(numberOfInviterWindowId,
groupTalkInterfaceId);
System.out.println("收到:" + messengeFromServer);
Vector<String> friendList = new Vector<String>();
Integer friendNumber;
while (messengeST.hasMoreTokens()) {
friendNumber = new Integer(messengeST.nextToken());
if (!friendNumber.equals(number)) {
talkInterface.talkingFriends.add(friendNumber);
friendList.add(friendNumber + "@"
+ goodFriends.get(friendNumber));
}
}
talkInterface.setTitle("你在与多人聊天");
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
qq.rar (60个子文件)
ChatServer
.project 386B
forms-1.0.6-src.zip 120KB
server
ChatServer.class 4KB
People.java 297B
ChatServer$2.class 1KB
ChatServer$Messenger.class 5KB
ChatServer$1.class 2KB
People.class 582B
ChatServer.java 11KB
forms-1.0.6.jar 84KB
.fatjar 342B
.classpath 226B
jdoc.bat 43B
ChatClient
.project 386B
META-INF
MANIFEST.MF 74B
forms-1.0.6-src.zip 120KB
com
swtdesigner
SwingResourceManager.java 5KB
SwingResourceManager.class 4KB
forms-1.0.6.jar 84KB
client
chimes.wav 54KB
AddTalkingFriends$2.class 3KB
LoginPrompt.java 3KB
People.java 297B
Client$TaskMessenge.class 1KB
TalkInterface$2.class 1KB
AddTalkingFriends$MyCellRenderer.class 2KB
AddTalkingFriends$1.class 2KB
TalkInterface.java 10KB
AddTalkingFriends.class 3KB
LoginChat.class 3KB
TalkInterface$5.class 2KB
ChatInterface$MyCellRenderer.class 2KB
ChatInterface$1.class 1KB
Client.java.bak 11KB
LoginPrompt$TimerTaskExample.class 2KB
Client.class 8KB
LoginPrompt.class 3KB
ChatInterface$2.class 4KB
LoginChat.java 5KB
AddTalkingFriends$4.class 3KB
AddTalkingFriends$3.class 2KB
LoginChat$1.class 3KB
TalkInterface$3.class 3KB
AddTalkingFriends.java 8KB
LoginPrompt$TimerTaskExample$1.class 952B
TalkInterface$4.class 1KB
ChatInterface.class 4KB
ChatInterface.java 7KB
Client.java 11KB
TalkInterface.class 6KB
TalkInterface$MyCellRenderer.class 2KB
People.class 582B
TalkInterface$1.class 851B
.fatjar 334B
images
7.gif 1KB
bai.gif 843B
Thumbs.db 621KB
.classpath 338B
jdoc.bat 43B
settings.fatjar 338B
共 60 条
- 1
资源评论
- raindays19892012-10-23我也没运行出来 看看代码还是不错的
- lyllyldudu2012-07-04为什么不能运行呢?是不是我弄错了
- bugeijifenglaji2012-08-05不能运行啊,不完整啊
- 菜鸟达人2012-07-11代码不完整,下载请注意
lylysrsrrtrt
- 粉丝: 1
- 资源: 5
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功