📄 servercontrol.java~1~
字号:
} catch (IOException ex) {
flag = false;
}
}
}
}
//发送客户列表信息
public void sendList()
{
DefaultListModel dlm=(DefaultListModel) lstUsers.getModel();
Enumeration em =dlm.elements();
while (em.hasMoreElements()) {
ClientBean cb = (ClientBean) em.nextElement();
cb.getOut().println("list:"+dlm.toString());
}
}
//发送群聊信息
public void sendAll(String msg) {
((DefaultListModel) lstChat.getModel()).addElement(msg);
Enumeration em = ((DefaultListModel) lstUsers.getModel()).elements();
while (em.hasMoreElements()) {
ClientBean cb = (ClientBean) em.nextElement();
cb.getOut().println(msg);
}
}
//发送私聊信息
public void sendPrivate(String text, ClientBean cb) {
((DefaultListModel) lstChat.getModel()).addElement(text);
cb.getOut().println(text);
}
//清空聊天信息
public void btnClear_actionPerformed(ActionEvent e) {
int choice = JOptionPane.showConfirmDialog(null, "确认清空聊天记录吗?", "提示",
JOptionPane.OK_CANCEL_OPTION);
if (choice == JOptionPane.OK_OPTION) {
((DefaultListModel) lstChat.getModel()).clear();
}
}
//发送消息
public void btnSend_actionPerformed(ActionEvent e) {
//获得输入的信息内容
String text = txtMsg.getText().trim();
txtMsg.setText("");
if (text.equals("")) {
JOptionPane.showMessageDialog(null, "消息不能为空!");
} else {
//获得发送的类型
int index = cmbType.getSelectedIndex();
//索引为0代表是群聊
if (index == 0) {
String msg = "管理员对所有人说:" + text;
sendAll(msg);
}
//否则是私聊
else {
Object obj = lstUsers.getSelectedValue();
if (obj == null) {
JOptionPane.showMessageDialog(null, "私聊必须要选择一个客户");
} else {
ClientBean cb = (ClientBean) obj;
String msg = "管理员对" + cb.getClientName() + "说:" + text;
sendPrivate(msg, cb);
}
}
}
}
public boolean existsClientName(String clientName)
{
boolean flag=false;
java.util.Enumeration emu=((DefaultListModel) lstUsers.getModel()).elements();
while(emu.hasMoreElements())
{
ClientBean cb=(ClientBean)emu.nextElement();
if(cb.getClientName().equals(clientName))
{
flag=true;
break;
}
}
return flag;
}
//客户端会话线程
class ChatThread extends Thread {
private Socket s;
public ChatThread(Socket s) {
this.s = s;
}
public void run() {
try {
PrintWriter out = new PrintWriter(s.getOutputStream(), true);
BufferedReader br = new BufferedReader(new InputStreamReader(s.
getInputStream()));
//获得客户端昵称
String clientName = br.readLine();
if(existsClientName(clientName))
{
s.close();
}else
{
//创建客户端BEAN
ClientBean cb = new ClientBean(clientName, out, s);
//获得用户列表
DefaultListModel dlm = (DefaultListModel) lstUsers.getModel();
//将客户端添加到ServerControl界面
dlm.addElement(cb);
//欢迎词
String welcome = "☆☆★★★欢迎" + clientName + "来到JAVA聊天室★★★☆☆";
//向各客户端发送欢迎词
sendAll(welcome);
sendList();
//启动获取该客户端信息线程
new GetThread(br, cb).start();
}
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
//获取客户端信息线程
class GetThread extends Thread {
private BufferedReader br;
private ClientBean cb;
private DefaultListModel dlm = (DefaultListModel) lstChat.getModel();
public GetThread(BufferedReader br, ClientBean cb) {
this.br = br;
this.cb = cb;
}
public void run() {
try {
while (true) {
String text = br.readLine();
String[] content = text.split(":");
if (content[1].equals("all")) {
String msg = content[0] + "对所有人说:" + content[2];
sendAll(msg);
} else {
int index = Integer.parseInt(content[1]);
Object obj=lstUsers.getModel().getElementAt(index);
if(obj!=null)
{
ClientBean cb=(ClientBean)obj;
String msg=content[0]+"对"+cb.getClientName()+"说:"+content[2];
sendPrivate(msg,cb);
}
}
}
}
//当客户端直接关闭窗体时,从JLIST直接移除该客户端信息
catch (SocketException se) {
if(flag)
{
DefaultListModel dlm = (DefaultListModel) lstUsers.getModel();
//判断该客户端是否是被管理员踢出去的,如果不是就欢送
if (dlm.contains(cb)) {
dlm.removeElement(cb);
String goodbye = "<html>欢送" + cb.getClientName() +
"离开聊天室</html>";
sendAll(goodbye);
sendList();
}
}
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
}
class ServerControl_btnSend_actionAdapter implements ActionListener {
private ServerControl adaptee;
ServerControl_btnSend_actionAdapter(ServerControl adaptee) {
this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent e) {
adaptee.btnSend_actionPerformed(e);
}
}
class ServerControl_btnClear_actionAdapter implements ActionListener {
private ServerControl adaptee;
ServerControl_btnClear_actionAdapter(ServerControl adaptee) {
this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent e) {
adaptee.btnClear_actionPerformed(e);
}
}
class ServerControl_btnSave_actionAdapter implements ActionListener {
private ServerControl adaptee;
ServerControl_btnSave_actionAdapter(ServerControl adaptee) {
this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent e) {
adaptee.btnSave_actionPerformed(e);
}
}
class ServerControl_btnKick_actionAdapter implements ActionListener {
private ServerControl adaptee;
ServerControl_btnKick_actionAdapter(ServerControl adaptee) {
this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent e) {
adaptee.btnKick_actionPerformed(e);
}
}
class ServerControl_btnStart_actionAdapter implements ActionListener {
private ServerControl adaptee;
ServerControl_btnStart_actionAdapter(ServerControl adaptee) {
this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent e) {
adaptee.btnStart_actionPerformed(e);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -