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

聊天室(支持私聊和版聊)

    博客分类:
  • java
阅读更多
	
	/**
	 * 进行聊天
	 */
	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());
			}
		}
	}
}

 昨天本人是在是闲着无聊写了一个聊天系统,感觉不是很差,希望大家多多交流 Action.java(获得消息的Action)

 

 

 

多多交流.

分享到:
评论

相关推荐

    c语言在线聊天室(含群聊,私聊,发送文件等功能)

    服务端程序通过结构体数组对客户端socket信息进行存储,并将收到的源客户端聊天消息转发给目的客户端,聊天数据包括文字信息和文件信息等。服务器端通过多线程实现服务端与多个客户端之间的数据发送与接收。

    基于socket的网络聊天室python源码+详细项目说明(支持多人群聊、私聊).zip

    基于socket的网络聊天室python源码+详细项目说明(支持多人群聊、私聊).zip 环境 * python 3.7 * tkinter 运行方法 * 初始化数据库,执行```database.py```文件中的```init_database()```函数(`main`中其他要注释) *...

    WCF聊天程序,C#源码,注释详细,支持群聊、私聊

    利用WCF技术实现的聊天室,C#源码,条理清晰,有详细的注释,运行WCFChatService\bin\Debug目录下的...可以多开几个客户端,支持多人群聊和各自私聊,可帮助大家更加深入了解WCF实现双向通信的原理,更适合初学者探究。

    基于Socket技术的多人聊天室系统源码20131021

    聊天室支持公聊和私聊频道,理论上可以支持几百甚至几千人,具体上限没有经过测试,在这个案例之中,大家将会掌握基于AgileEAS.NET SOA中间件Socket/Tcp框架的比较复杂的消息定义及消息处理及消息协调,同时还会...

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

    java写的聊天室程序,支持群聊,公聊,私聊,支持刷新好友列表,使用swing以及awt写的简单界面,可以多人登录

    聊天室全代码

    连接数据库,进行后台聊天系统,支持私聊、多聊等功能,包括界面的搭建……

    JSP聊天室(实现)

    个人原创聊天室,刚学完SERVLET和JSP入门的作品 - 用户登录(验证登录,头像选择) - 公聊 - 私聊 - 动作/表情 - 图片发送 - 聊天范围选择 - 清空聊天记录 - 分屏聊天 - 更改用户信息 ...

    AQ聊-情感视频聊天社区 v5.763.zip

    2 1对1私聊:聊天室提供强大的视频对聊功能,你可以随心所欲与好友视频通话。超清晰视频给你不一样的体验。视频窗口可以随意缩放,震撼效果无与伦比! 3虚拟礼物互赠:眼花缭乱的虚拟礼物,在你玩转聊天室的同时,...

    基开ASP聊天室毕业设计

    聊天室支持公聊,私聊,每个用户都有代表自己的昵称,可在用户在线列表中选择聊天对象.聊天消息中可插入表情图释,采用主动刷新机制,确保不会掉线.精心设计的消息分发引擎, 在没有新信息的时候主窗口看不到刷新,尽可能的...

    DOS下udp的聊天室(C语言)

    C语言写的dos界面的聊天室,实现了用户注册登录,公聊和私聊,多人聊天(这是本人第一次上次资源,代码不是很好,还有很多改进的地方,但我也是用了心的,希望大家支持下)

    一个用于Web游戏的聊天室(包括设计文档和源代码)

    支持私聊和供聊 支持统计在线人数 可开多个房间 注意:有人反映这个不能直接使用,在这里特做一下说明 =============================================== 这个程序是从游戏中拿出来的,并不是一个独立的应用程序 发...

    一个基于WEB的聊天室代码

    支持私聊和供聊 支持统计在线人数 可开多个房间 注意:有人反映这个不能直接使用,在这里特做一下说明 =============================================== 这个程序是从游戏中拿出来的,并不是一个独立的应用程序 发...

    JAVA AJAX聊天室

    支持私聊 和公聊 用户登录 用户列表 以及用户关闭浏览器时 清除用户列表等 没有使用DB 聊天记录存在内存中。 使用Struts2 DWR JQuery 本人学习中 请见谅 如有问题 欢迎交流

    基于 Java 实现(GUI)的聊天室设计与实现【100010127】

    (1)聊天功能:可以实时接收和发送信息,并能支持公聊和私聊的的方式,能够查看聊天记录,聊天过程中能对字体、表情等进行设定等。 (2)用户功能:可以随时注册和登录及注销,并能选择性加好友和删除好友以及查看...

    FLEX 开源聊天室

    支持建立私聊,在线用户共同群聊,多用户开私房多用户聊。 客户端为FLEX。UI可从制。

    开源实时聊天系统Firechat.zip

    Firechat 是基于 Firebase 构建的开源实时聊天系统。提供了安全多用户、多聊天室的聊天系统,提供灵活的认证机制和主持人功能。支持私聊、聊天邀请和用户搜索等功能。 标签:Firechat

    阿赛聊天源码(无数据库) v1 缓存版本.rar

    7、提供私聊、公开聊天两种模式;8、聊天内容以颜色区分,绿色为自己发言,黄色为别人对你发言,灰色为别人对其他人,白色为对所有人;9、支持SQL、access两种数据库方式;10、可无缝整合各类企业、行业、门户网站;...

    springboot netty-socket-io免费聊天系统

    springboot netty-sockeit-io免费聊天系统,支持一对一,一对多,单独聊,私聊,群聊,开箱即用,支持图片、文件发送接收,支持windows、linux,支持pc端、手机端,支持ie8、firefox、chrome任意浏览器 自己安装...

    2021财经直播聊天系统 网络直播聊天室源码 php财经直播 金融财经 喊单系统

    2、支持公聊、私聊 3、后台实时查看访客数据 4、带有喊单、晒单系统 5、直播间机器人自动上下线、自动发言 6、带有红包、抽奖、签到等营销模式 7、会员推广功能:支持分享推广成为下线 8、前台设有粉丝榜和讲师榜

    基于Go语言开发的Game IM, 游戏中使用的聊天系统

    聊天室 如世界频道 群聊人数非常多,群人员上限无限大(5000) 在线用户均可参与聊天,无需申请加入群聊,随时加入,随时退出 无固定成员列表,成员之间可能是无好友关系的陌生人 离线后不需要收到消息推送 普通...

Global site tag (gtag.js) - Google Analytics