package clientele;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.Socket;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Locale;
import java.util.Vector;
import javax.swing.JOptionPane;
import setting.AudioPlay;
import setting.Embody;
import setting.User;
public class Client
{
/**
* 定义全局变量
*/
public String message;
public int id;
/**
* 定义Socket 通过"套接字"向网络发出请求或者应答网络请求
*/
private static Socket socket;
/**
客户端主界面
*/
private static ClientMainUI mainUI;
/**
* 树形好友列表
*/
static FriendTree friendTree;
/**
* 修改个人信息基面
*/
static ModifyUserUI modify;
/**
* 登录界面
*/
static LoginUI loginui;
/**
* 注册界面
*/
static UserRegUI userRegUI;
/**
* 聊天窗口
*/
private static ChatUI chatui;
/**
* 发企业信息
*/
private static InchatUI inchatui;
/**
* 消息验证
*/
private static InchatverUI inchatver;
/**
* 消息窗口
*/
private static InchatarrivUI inchatarrivui;
/**
*聊天记录窗口
*/
private static Chatrecord chatrecord;
/**
* 对象输入流
*/
private ObjectInputStream netIn;
/**
* 对象输出流
*/
private ObjectOutputStream netOut;
/**
* 保存用户聊天窗口souceID和destID更据它判断是否需要NEW新的窗口
*/
@SuppressWarnings("unchecked")
private Vector chatUIvector = new Vector();
/**
* 保存用户聊天记录窗口souceID和destID更据它判断是否需要NEW新的窗口
*/
@SuppressWarnings("unchecked")
private Vector chatrecordvector = new Vector();
/**
* 客户端运行标志
*/
private boolean runFlag = true;
/**
* 用来保存自己的信息,其值常改变
*/
private User userInfo;
/**
* 用户登录成功后 信息保存在此对象 其值不再改变 用于获取ID,设置窗体标题
*/
private User constuser = new User();
/**
* 延时接收信令信号量
*/
private static boolean acceptorder = false;
/**
* 控制ClientMainUI中 jLabel显示
*/
private static boolean hidden = true;
/**
* 暂时储存信令
*/
private String ordersave;
/**
* 储存添加好友和下线时的信令
*/
@SuppressWarnings("unchecked")
private Vector orderSys = new Vector();
/**
* 用于客户端其他类调用
*/
static Client client;
/**
* 播放声音
*/
private AudioPlay aplay = new AudioPlay();
javax.swing.Timer time;
/**
* 启动客服端与服务器建立连接
*/
public void init()
{
try
{
String ip = "";
String port = "";
ip = JOptionPane.showInputDialog("请输入服务器IP", "");
port = JOptionPane.showInputDialog("请输入服务器端口", 16294);
int portInt = Integer.parseInt(port);
socket = new Socket(ip, portInt);
loginui = new LoginUI();
loginui.getJFrame();
netOut = new ObjectOutputStream(socket.getOutputStream());
netIn = new ObjectInputStream(socket.getInputStream());
receive();
} catch (Exception e)
{
JOptionPane.showMessageDialog(null, "网络异常,连接服务端失败", "提示", 1);
System.exit(0);
}
}
/**
* 把对象输出网络
*/
public void send(Embody objMessage)
{
try
{
netOut.writeObject(objMessage);
netOut.flush();
} catch (Exception e)
{
System.out.println("网络输出异常" + e.getMessage());
}
}
/**
* 从网络接收对象
*/
public void receive()
{
Embody objMsg = new Embody();
while (runFlag)
{
try
{
if ((objMsg = (Embody) netIn.readObject()) != null)
{
chatProtocol(objMsg);
}
} catch (IOException e)
{
System.out.println("网络接收异常" + e.getMessage());
} catch (ClassNotFoundException e)
{
System.out.println("找不到这个类" + e.getMessage());
} catch (Exception e)
{
System.out.println("未知异常" + e.getMessage());
}
}
}
/**
* 响应ClientMainUI的喇叭事件 接收到系统消息后
*/
public void acceptOrder()
{
Client.hidden = false;
this.msgShandong(hidden);
}
/**
* 信令接收的全部方法
*/
@SuppressWarnings("unchecked")
public void chatProtocol(Embody objMsg) throws IOException,
ClassNotFoundException
{
this.loginOrderRecieve(objMsg);
this.regOrderRecieve(objMsg);
this.reicievModifyUserInfo(objMsg);
this.chatMsgRecieve(objMsg);
this.inchatReceieve(objMsg);
this.delFriendOrderRecieve(objMsg);
this.addfriendfailInfoOder(objMsg);
this.checkFriendInfoOrderRecieve(objMsg);
this.checkfriendIPReceive(objMsg);
if (objMsg.getOrder().equals(setting.Command.addfriendqueren)
|| objMsg.getOrder().equals(setting.Command.addfriendaginqueren)
|| objMsg.getOrder().equals(setting.Command.addfriendtongyi)
|| objMsg.getOrder().equals(setting.Command.addfriendbutongyi)
|| objMsg.getOrder().equals(setting.Command.friendliveline))
{
if (objMsg.getOrder().equals(setting.Command.addfriendqueren)
|| objMsg.getOrder().equals(
setting.Command.addfriendaginqueren)
|| objMsg.getOrder().equals(setting.Command.addfriendtongyi)
|| objMsg.getOrder().equals(
setting.Command.addfriendbutongyi)
|| objMsg.getOrder().equals(setting.Command.friendliveline))
{
aplay.soundPlay("/music/kesou.wav");
}
orderSys.add(objMsg.getOrder());// 将收来的信令保存
hidden = true;// 收到信令就开始闪动
this.msgShandong(hidden);
if (!this.msgShandong(hidden))
{
acceptorder = true;
}
}
while (Client.acceptorder)
{
for (int i = 0; i < orderSys.size(); i++)
{
ordersave = (String) orderSys.elementAt(i);
objMsg.setOrder(ordersave);
orderSys.removeElementAt(i);// 删除已发信令
this.addFriendOrderRecieve(objMsg);
this.friendlogoutOrderRecieve(objMsg);
Client.acceptorder = false;
}
}
}
/**
* ClientMainUI中头像是否闪动
*/
public void run()
{
Client.mainUI.getJLabel().setVisible(false);
}
public boolean msgShandong(boolean hidden)
{
while (Client.hidden)
{
for (int i = 0;; i = i+5)
{
if (i % 2 == 0)
{
Client.mainUI.getJLabel().setVisible(false);
}
if (i % 2 == 1)
{
Client.mainUI.getJLabel().setVisible(true);
}
if (!Client.hidden)
{
Client.mainUI.getJLabel().setVisible(true);
break;
}
}
}
return hidden;
}
/**
* 接收注册信令
*/
public void regOrderRecieve(Embody objMsg)// 注册信令
{
String order = objMsg.getOrder();
if (order.equals(setting.Command.registersuccess))
{
JOptionPane.showMessageDialog(null, "注册成功,你的号码为"
+ String.valueOf(((User) objMsg.getObjMessage()).getID()),
"提示", 1);
loginui.getJTextField().setText(
String.valueOf(((User) objMsg.getObjMessage()).getID()));
loginui.getJPasswordField().setText("");
Client.userRegUI.getJFrame().setVisible(false);
return;
}
}
/**
* 接收登录信令和留言信令
*/
public void loginOrderRecieve(Embody objMsg)// 登录信令接受
{
String order = objMsg.getOrder();
/**
* 收到登录成功信令
*/
if (order.equals(setting.Command.loginsuccess))// 得到登录成功的信令后还需更新好友列表
{
aplay.soundPlay("/music/shangxian.wav");
Client.loginui.getJFrame().setVisible(false);// 登录成功后隐藏登录界面
userInfo = new User();
userInfo = (User) objMsg.getObjMessage();// 更新从服务器传来的数据
constuser = userInfo;// 保存
mainUI = new ClientMainUI();// 实例化主界面
friendTree = new FriendTree();// 实例化保存好友列表的JTree
if (userInfo.getFriend().size() == 0)// 没有好友
{
mainUI.setFriend(friendTree.chushi());
mainUI.getjFrame();// 得到JFrame意味着生成了所有的组件
mainUI.getjFrame().setVisible(true);
mainUI.getjFrame().setTitle(String.valueOf(userInfo.getID()));// 设置标题
}
if (userInfo.getFriend().size() > 0)// 有好友
{
for
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
应用程序.rar (21个子文件)
server.jar 24KB
client.jar 121KB
源代码
server
ServerUI.java 8KB
Work.java 16KB
Serve.java 12KB
UserInfoAndThread.java 540B
clientele
Client.java 32KB
LoginUI.java 6KB
InchatverUI.java 4KB
Chatrecord.java 5KB
InchatarrivUI.java 4KB
InchatUI.java 4KB
UserRegUI.java 8KB
FriendTree.java 10KB
ClientMainUI.java 5KB
ChatUI.java 6KB
ModifyUserUI.java 8KB
setting
Embody.java 2KB
Command.java 4KB
User.java 5KB
AudioPlay.java 507B
共 21 条
- 1
资源评论
Navy8888
- 粉丝: 11
- 资源: 7
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功