`
zhykhs
  • 浏览: 61491 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

一个可以进行私聊,版聊,公聊的聊天室

    博客分类:
  • Java
阅读更多

昨天本人是在是闲着无聊写了一个聊天系统,感觉不是很差,希望大家多多交流

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());
			}
		}
	}
}

 

多多交流.

分享到:
评论

相关推荐

    QQ聊天室公聊与私聊

    QQ聊天室公聊与私聊是基于Java编程环境JBuilder开发的一个实时通讯应用,它实现了基本的聊天功能,包括群组内的公聊和用户之间的私聊。在这个项目中,我们将会探讨以下几个重要的IT知识点: 1. **Java编程基础**:...

    java基于socket/server的多线程聊天室程序,可以公聊和私聊。

    综上所述,本程序通过综合运用Java Socket编程、多线程技术和Swing图形界面库,成功实现了具有公聊和私聊功能的聊天室应用。这对于学习网络编程、多线程以及Java GUI开发都有着重要的参考价值。

    java聊天室公聊,私聊下载

    Java聊天室是一个基于Java编程语言实现的实时通讯应用,它具备了基本的公聊和私聊功能,允许用户之间进行互动交流。在这个项目中,开发者已经实现了连接服务器的基础架构,但尚未集成数据库来存储用户信息和聊天记录...

    聊天室加私聊软件

    在这个聊天室中,服务器不仅需要维护在线用户的列表,还要处理公聊和私聊的消息转发。 接着,是“客户端”部分。`SocketClient`文件可能是客户端的实现,客户端使用Socket连接到服务器,然后可以发送和接收消息。...

    QQ聊天室 包括私聊功能

    网络编程作业 实现了聊天室的公聊和私聊功能 有用户在线列表 有客户端 服务器端

    LINUX聊天窗口实现公聊与私聊

    服务器和客户端程序能运行实现公聊、私聊。 线程处理。

    在linux下开发的聊天系统,公聊,私聊,多线程

    这个聊天系统支持公聊和私聊功能,这意味着它具备了基本的即时通讯能力,允许用户进行群体交流和一对一的私密对话。多线程技术在这里扮演着至关重要的角色,它能够确保系统的高效运行和良好响应。 1. **网络编程**...

    java聊天程序(私聊 公聊 截图 传送文件)

    Java聊天程序是一个基于Java编程语言实现的交互式通信软件,具备多种功能,如私聊、公聊、截图分享以及文件传输。这样的程序通常涉及到网络编程、多线程、图形用户界面(GUI)以及数据交换协议等多个核心知识点。 1...

    web网页版的聊天室 JsP+ ajax 实现公聊和私聊

    还有私聊,群聊,离开聊天室都有提示, 另外有显示在线总人数和账号的公告栏! 下载解压导入就能运行,无需加载其他jar包, 绝对是个值得学习的好项目, 开源从分享开始,希望大家多分享自己的代码。。。。

    Java聊天程序(私聊+公聊+截图+传送文件)

    公聊则允许所有在线用户参与到同一个聊天室中,分享信息和讨论。Java聊天程序中的公聊可能采用发布-订阅模型,其中服务器作为发布者,而所有客户端作为订阅者,接收到的消息会广播到所有连接的用户。为了实现这一点...

    使用socket实现网络聊天室和私聊功能

    使用Socket可以开发出各种网络应用,例如网络聊天室和私聊功能,这些都是基于客户端和服务器模型的网络通信应用。 在网络聊天室应用中,服务器需要维护一个客户端Socket列表,以便能够将消息广播给所有连接的客户端...

    java-chat-program.rar_ClientProc java_java私聊和公聊

    在程序实现时,需要维护一个用户列表,区分私聊和公聊的消息,并正确地将它们路由到目标。 5. **截屏功能**: 实现截屏功能可能涉及操作系统级别的API调用,例如在Java中使用`java.awt.Robot`类可以捕捉屏幕快照。...

    Node.js中使用socket创建私聊和公聊聊天室

    在上篇文章给大家介绍使用Angular和Nodejs、socket.io搭建聊天室及多人聊天室,本文继续介绍Node.js中使用socket创建私聊和公聊聊天室,具体详情请看下文吧。 nodejs的应用中,关于socket应该是比较出彩的了,socket...

    用C#里边.net编写的聊天室只能公聊

    标题中的“用C#里边.net编写的聊天室只能公聊”表明这是一个使用C#编程语言,基于.NET框架开发的在线聊天应用,但其功能仅限于公共聊天,即所有用户在同一聊天室里互相交流,没有私聊或分组聊天的功能。 在描述中,...

    仅利用session和application实现聊天室

    可以不设置用户自行建立聊天室的功能,而且在聊天中途不能从一个聊天室切换到另一个聊天室。  进入聊天室后,用户可以从用户信息窗口看到该聊天室中所有用户的用户名,也可以在聊天窗口中看到随时更新的聊天信息...

    java实现聊天室功能(全部代码,有界面)

    description: 该项目是一个 Java 实现的聊天室系统,支持群聊、公聊、私聊等功能,並支持刷新好友列表。使用 Swing 库来创建简单的界面,可以多人登录。 标签: Java 聊天室 聊天 服务器端代码分析 服务器端代码...

    java实现swing的网络通信私聊,公聊,上传文件,仿qq

    本项目以"java实现swing的网络通信私聊,公聊,上传文件,仿qq"为主题,旨在利用Swing构建一个类似QQ的即时通讯应用。下面将详细介绍其中涉及的关键知识点。 1. **Swing组件**: - `JFrame`:作为应用程序的主要...

    asp 简单聊天室 趣味聊天室

    在这个聊天室中,用户可以进行公聊,即所有在线用户都能看到的信息交流,同时还有私聊功能,允许用户之间进行一对一的私人对话。聊天室还提供了一个趣味性的特点——选择头像登录,使得交流更具个性化。 ASP是微软...

Global site tag (gtag.js) - Google Analytics