- 浏览: 61772 次
- 性别:
- 来自: 上海
文章分类
最新评论
昨天本人是在是闲着无聊写了一个聊天系统,感觉不是很差,希望大家多多交流
Action.java(获得消息的Action)
/** * 进行聊天 */ public String chat(int type, String text, String userId, String otherUserId, String matchId) { switch(type) { case 1: ChatRoomUtil.putMessages(ChatRoomUtil.Type.ALL, text, userId); return ChatRoomUtil.out(ChatRoomUtil.getMessage(ChatRoomUtil.Type.ALL, userId)); case 2: ChatRoomUtil.putMessages(ChatRoomUtil.Type.BLOCK, text, matchId, userId); return ChatRoomUtil.out(ChatRoomUtil.getMessage(ChatRoomUtil.Type.BLOCK, matchId, userId)); case 3: ChatRoomUtil.putMessages(ChatRoomUtil.Type.INDIVIDUAL, text, userId, otherUserId); return ChatRoomUtil.out(ChatRoomUtil.getMessage(ChatRoomUtil.Type.INDIVIDUAL, userId, otherUserId)); } return ""; } public String getChat(int type, String text, String userId, String otherUserId, String matchId) { switch(type) { case 1: return ChatRoomUtil.out(ChatRoomUtil.getMessage(ChatRoomUtil.Type.ALL, userId)); case 2: return ChatRoomUtil.out(ChatRoomUtil.getMessage(ChatRoomUtil.Type.BLOCK, matchId, userId)); case 3: return ChatRoomUtil.out(ChatRoomUtil.getMessage(ChatRoomUtil.Type.INDIVIDUAL, userId, otherUserId)); } return ""; }
ChatRoom.java(聊天室的代码)
import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.List; import java.util.Timer; import java.util.TimerTask; public class ChatRoomUtil { public static enum Type { ALL, BLOCK, INDIVIDUAL } private static List<Message> room = new ArrayList<Message>(); private static Timer timer = new Timer(); static { ChatRoomUtil cu = new ChatRoomUtil(); timer.schedule(cu.new Task(), 10000, 10000); } static class All extends Message { private Type type; public Type getType() { return type; } public void setType(Type type) { this.type = type; } } static class Block extends Message { private String blockId; private Type type; public Type getType() { return type; } public void setType(Type type) { this.type = type; } public String getBlockId() { return blockId; } public void setBlockId(String blockId) { this.blockId = blockId; } } static class Individual extends Message { private String hostId; private String guestId; private Type type; public Type getType() { return type; } public void setType(Type type) { this.type = type; } public String getHostId() { return hostId; } public void setHostId(String hostId) { this.hostId = hostId; } public String getGuestId() { return guestId; } public void setGuestId(String guestId) { this.guestId = guestId; } } static class Message { private long id; private String supplyId; private List<String> users = new ArrayList<String>(); private Date appearTime; private String Text; public List<String> getUsers() { return users; } public void setUsers(List<String> users) { this.users = users; } public Date getAppearTime() { return appearTime; } public void setAppearTime(Date appearTime) { this.appearTime = appearTime; } public String getText() { return Text; } public void setText(String text) { Text = text; } public long getId() { return id; } public void setId(long id) { this.id = id; } public String getSupplyId() { return supplyId; } public void setSupplyId(String supplyId) { this.supplyId = supplyId; } } class Task extends TimerTask { @Override public void run() { synchronized (room) { for (int i = 0; i < room.size(); i++) { Calendar cal = Calendar.getInstance(); Calendar ca = Calendar.getInstance(); ca.setTime(room.get(i).getAppearTime()); if(cal.get(Calendar.SECOND) - ca.get(Calendar.SECOND) > 5) { room.remove(room.get(i)); } } } } } public static void putMessages(Type type, String text, String id) { synchronized (room) { All all = new All(); all.setId(System.currentTimeMillis()); all.setType(type); all.setText(text); all.setAppearTime(new Date()); all.setSupplyId(id); room.add(all); } } public static void putMessages(Type type, String text, String id, String userId) { synchronized (room) { switch(type) { case INDIVIDUAL: Individual indiv = new Individual(); indiv.setId(System.currentTimeMillis()); indiv.setType(type); indiv.setText(text); indiv.setAppearTime(new Date()); indiv.setGuestId(userId); indiv.setHostId(id); room.add(indiv); break; case BLOCK: Block block = new Block(); block.setId(System.currentTimeMillis()); block.setSupplyId(userId); block.setBlockId(id); block.setType(type); block.setText(text); block.setAppearTime(new Date()); room.add(block); break; } } } public static List<Message> getMessage(Type type, String id) { synchronized (room) { List<Message> messages = new ArrayList<Message>(); for (Message message : room) { if(message instanceof All) { boolean isOld = false; for (String str : message.getUsers()) { if(str.equals(id)) { isOld = true; } } if(!isOld) { messages.add(message); message.getUsers().add(id); } } } return messages; } } public static List<Message> getMessage(Type type, String id, String userId) { synchronized (room) { List<Message> messages = new ArrayList<Message>(); List<Message> allMessages = getMessage(Type.ALL, id); if(allMessages != null) { messages.addAll(allMessages); } switch(type) { case INDIVIDUAL: for (Message message : room) { if(message instanceof Individual) { boolean isOld = false; Individual indiv = (Individual)message; for (String str : message.getUsers()) { if(str.equals(id)) { isOld = true; } } if(!isOld) { if((indiv.getHostId().equals(id) && indiv.getGuestId().equals(userId)) || ((indiv.getHostId().equals(userId) && indiv.getGuestId().equals(id)))) { messages.add(message); message.getUsers().add(id); } } } } break; case BLOCK: for (Message message : room) { if(message instanceof Block) { boolean isOld = false; if(((Block)message).getBlockId().equals(id)) { for (String str : message.getUsers()) { if(str.equals(userId)) { isOld = true; } } if(!isOld) { messages.add(message); message.getUsers().add(userId); } } } } break; } return messages; } } public static void main(String[] args) { ChatRoomUtil.putMessages(ChatRoomUtil.Type.ALL, "系统公告", "1"); ChatRoomUtil.putMessages(ChatRoomUtil.Type.ALL, "系统公告1", "1"); ChatRoomUtil.putMessages(ChatRoomUtil.Type.ALL, "系统公告2", "1"); ChatRoomUtil.putMessages(Type.INDIVIDUAL, "我小孩", "1", "2"); ChatRoomUtil.putMessages(Type.INDIVIDUAL, "你小孩", "2", "1"); ChatRoomUtil.putMessages(Type.INDIVIDUAL, "你是三1", "1", "3"); ChatRoomUtil.putMessages(Type.INDIVIDUAL, "你是三2", "1", "3"); ChatRoomUtil.putMessages(Type.BLOCK, "你是11-1", "11", "3"); ChatRoomUtil.putMessages(Type.BLOCK, "你是11-2", "11", "3"); ChatRoomUtil.putMessages(Type.BLOCK, "你是四", "11", "4"); while(true) { try { ChatRoomUtil.out1(ChatRoomUtil.getMessage(Type.ALL, "1")); ChatRoomUtil.out1(ChatRoomUtil.getMessage(Type.INDIVIDUAL, "1", "2")); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int i = new Integer(br.readLine()); switch(i) { case 1: ChatRoomUtil.out1(ChatRoomUtil.getMessage(Type.INDIVIDUAL, "1", "3")); System.out.println(room.size() + " roomSize"); break; case 2: ChatRoomUtil.out1(ChatRoomUtil.getMessage(Type.INDIVIDUAL, "2", "1")); System.out.println(room.size() + " roomSize"); break; case 3: ChatRoomUtil.out1(ChatRoomUtil.getMessage(Type.BLOCK, "11", "2")); System.out.println(room.size() + " roomSize"); break; } Thread.sleep(1000); } catch (Exception e) { e.printStackTrace(); } } } public static String out(List<Message> mess) { if(mess != null) { StringBuffer sb = new StringBuffer(); for (Message message : mess) { sb.append("<div>"); sb.append(message.getText()); sb.append("<br/></div>"); } return sb.toString(); } return ""; } public static void out1(List<Message> mess) { if(mess != null) { for (Message message : mess) { System.out.println(message.getText()); } } } }
多多交流.
发表评论
-
实现JAVA中String.trim()方法
2010-10-12 21:54 1570实现一个简单的String.trim(String s)方法 ... -
Concurrency 小结
2010-06-27 22:01 191.并发编程让我们可以将程序划分为多个分离的,独立运行的任务。 ... -
JAVA中注解随笔
2009-02-19 15:45 1631package _20.annotation; impo ... -
java性能优化
2008-06-30 20:07 993最近看了一些关于java性能优化方面的知识,作为个人总结,写下 ... -
stream classdesc serialVersionUID = 76026088018680
2008-04-09 15:49 1869java.io.InvalidClassException: ...
相关推荐
QQ聊天室公聊与私聊是基于Java编程环境JBuilder开发的一个实时通讯应用,它实现了基本的聊天功能,包括群组内的公聊和用户之间的私聊。在这个项目中,我们将会探讨以下几个重要的IT知识点: 1. **Java编程基础**:...
综上所述,本程序通过综合运用Java Socket编程、多线程技术和Swing图形界面库,成功实现了具有公聊和私聊功能的聊天室应用。这对于学习网络编程、多线程以及Java GUI开发都有着重要的参考价值。
Java聊天室是一个基于Java编程语言实现的实时通讯应用,它具备了基本的公聊和私聊功能,允许用户之间进行互动交流。在这个项目中,开发者已经实现了连接服务器的基础架构,但尚未集成数据库来存储用户信息和聊天记录...
在这个聊天室中,服务器不仅需要维护在线用户的列表,还要处理公聊和私聊的消息转发。 接着,是“客户端”部分。`SocketClient`文件可能是客户端的实现,客户端使用Socket连接到服务器,然后可以发送和接收消息。...
网络编程作业 实现了聊天室的公聊和私聊功能 有用户在线列表 有客户端 服务器端
服务器和客户端程序能运行实现公聊、私聊。 线程处理。
这个聊天系统支持公聊和私聊功能,这意味着它具备了基本的即时通讯能力,允许用户进行群体交流和一对一的私密对话。多线程技术在这里扮演着至关重要的角色,它能够确保系统的高效运行和良好响应。 1. **网络编程**...
Java聊天程序是一个基于Java编程语言实现的交互式通信软件,具备多种功能,如私聊、公聊、截图分享以及文件传输。这样的程序通常涉及到网络编程、多线程、图形用户界面(GUI)以及数据交换协议等多个核心知识点。 1...
还有私聊,群聊,离开聊天室都有提示, 另外有显示在线总人数和账号的公告栏! 下载解压导入就能运行,无需加载其他jar包, 绝对是个值得学习的好项目, 开源从分享开始,希望大家多分享自己的代码。。。。
公聊则允许所有在线用户参与到同一个聊天室中,分享信息和讨论。Java聊天程序中的公聊可能采用发布-订阅模型,其中服务器作为发布者,而所有客户端作为订阅者,接收到的消息会广播到所有连接的用户。为了实现这一点...
使用Socket可以开发出各种网络应用,例如网络聊天室和私聊功能,这些都是基于客户端和服务器模型的网络通信应用。 在网络聊天室应用中,服务器需要维护一个客户端Socket列表,以便能够将消息广播给所有连接的客户端...
在程序实现时,需要维护一个用户列表,区分私聊和公聊的消息,并正确地将它们路由到目标。 5. **截屏功能**: 实现截屏功能可能涉及操作系统级别的API调用,例如在Java中使用`java.awt.Robot`类可以捕捉屏幕快照。...
在上篇文章给大家介绍使用Angular和Nodejs、socket.io搭建聊天室及多人聊天室,本文继续介绍Node.js中使用socket创建私聊和公聊聊天室,具体详情请看下文吧。 nodejs的应用中,关于socket应该是比较出彩的了,socket...
标题中的“用C#里边.net编写的聊天室只能公聊”表明这是一个使用C#编程语言,基于.NET框架开发的在线聊天应用,但其功能仅限于公共聊天,即所有用户在同一聊天室里互相交流,没有私聊或分组聊天的功能。 在描述中,...
可以不设置用户自行建立聊天室的功能,而且在聊天中途不能从一个聊天室切换到另一个聊天室。 进入聊天室后,用户可以从用户信息窗口看到该聊天室中所有用户的用户名,也可以在聊天窗口中看到随时更新的聊天信息...
description: 该项目是一个 Java 实现的聊天室系统,支持群聊、公聊、私聊等功能,並支持刷新好友列表。使用 Swing 库来创建简单的界面,可以多人登录。 标签: Java 聊天室 聊天 服务器端代码分析 服务器端代码...
本项目以"java实现swing的网络通信私聊,公聊,上传文件,仿qq"为主题,旨在利用Swing构建一个类似QQ的即时通讯应用。下面将详细介绍其中涉及的关键知识点。 1. **Swing组件**: - `JFrame`:作为应用程序的主要...
在这个聊天室中,用户可以进行公聊,即所有在线用户都能看到的信息交流,同时还有私聊功能,允许用户之间进行一对一的私人对话。聊天室还提供了一个趣味性的特点——选择头像登录,使得交流更具个性化。 ASP是微软...