亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? chatservice.java

?? 一個(gè)使用AJAX+EasyJWeb+EasyDBO及多線程技術(shù) 開發(fā)的網(wǎng)上信息交流及互動(dòng)系統(tǒng)
?? JAVA
字號:
package com.easyjf.chat.business;

import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Random;

public class ChatService implements Runnable {
private static final Map service=new HashMap();//會(huì)議室服務(wù),系統(tǒng)中的當(dāng)前會(huì)議室存放到該表集合中
private static final int maxServices=10;//可以同時(shí)開的最大會(huì)議室數(shù)
private static final SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd");
private final List msgs;//聊天信息Chat
private final List users;//在線用戶,ChatUser
private final List talkers;//排隊(duì)發(fā)言人數(shù)Talker
private final List manager;//會(huì)議室管理員
private Talker currentTalker;//當(dāng)前發(fā)言人
private String cid;//會(huì)議室id
private String title;//會(huì)議室主題
private String intro;//會(huì)議室簡介
private String owner;//會(huì)議室創(chuàng)建人
private int maxUser;//最大在線人數(shù)
private int interval;//最大刷新時(shí)間間隔
private String vrtype;//訪問權(quán)限
private String vrvalue;//訪問值
private String announce;
private String password;//房間進(jìn)入密碼
private int status;//會(huì)議室狀態(tài)
private String filePath;
//private Thread thread;
private boolean isStop=false;
public ChatService()
{
	this.msgs=new ArrayList();
	this.users=new ArrayList();
	this.talkers=new ArrayList();
	this.manager=new ArrayList();
	this.maxUser=1000;//最大1000人同時(shí)
	this.interval=1000*60*5;//5分鐘以前的信息
}
/**
 * 停止所有會(huì)議室
 *
 */
public  static void clear()
{
	if(!service.isEmpty())
	{
		Iterator it=service.values().iterator();
		while(it.hasNext())
		{
			ChatService chat=(ChatService)it.next();
			chat.stop();
		}
	}
		service.clear();
}
/**
 * 創(chuàng)建一個(gè)會(huì)議室
 * @param name 會(huì)議室ID
 * @return
 */
public static ChatService create(String name)
{
ChatService ret=null;
if(service.containsKey(name))
{
	ChatService s=(ChatService)service.get(name);
	s.stop();
	service.remove(name);
}
if(service.size()<maxServices)
{
	ret=new ChatService();	
	service.put(name,ret);
}
return ret;
}
/**
 * 停止某個(gè)會(huì)議室
 * @param name 會(huì)議室ID
 * @return
 */
public static boolean close(String name)
{
	ChatService chatRoom=ChatService.get(name);
	if(chatRoom!=null)
		{
		chatRoom.stop();
		service.remove(name);
		}
	return true;
}
/**
 * 獲得一個(gè)會(huì)議室信息
 * @param name 會(huì)議室ID
 * @return
 */
public static ChatService get(String name)
{
	if(service.containsKey(name))return (ChatService)service.get(name);
	else return null;
}

public void run() {
	// TODO Auto-generated method stub
	//this.thread=Thread.currentThread();
	while(!isStop)
	{
	//System.out.println("開始監(jiān)控一個(gè)會(huì)議室!"+this.title);
	this.flash();
	try{
	Thread.sleep(5000);
	}
	catch(Exception e)
	{
		e.printStackTrace();		
	}	
	}
	//System.out.println("結(jié)束!");
}
public void stop()
{
	this.flashAll();
	isStop=true;
}
//會(huì)議室中有人發(fā)言
public boolean talk(Chat chat)
{
	boolean ret=false;
	if(canTalk(chat.getSender()))
		{		
		this.msgs.add(chat);
	     ret=true;
		}
	return ret;
}
//新用戶加入會(huì)議室
public boolean join(ChatUser user)
{
	boolean ret=false;
	if(canJoin(user))
	{
		boolean isJoin=false;
		for(int i=0;i<users.size();i++)
		{
			ChatUser u=(ChatUser)users.get(i);
			if(u.getUserName().equals(user.getUserName()))
			{
				isJoin=true;
				u.setLastAccessTime(new Date());
			}
		}
		if(!isJoin)this.users.add(user);	
		talk(geneSystemMsg(user.getUserName()+"進(jìn)入會(huì)議室!"));
		ret=true;
		
	}
	return ret;
}

public boolean exit(ChatUser user)
{	    
  talk(geneSystemMsg(user.getUserName()+"退出了會(huì)議室!"));
  return this.users.remove(user);
}
public Chat geneSystemMsg(String info)
{
	Chat msg=new Chat();
	   msg.setCid(geneId());
	   msg.setSender("系統(tǒng)");
	   msg.setContent(info);
	   msg.setVdate(new Date());	
	   msg.setReciver("大家");
	   return msg;
}
//檢測用戶是否具有加入會(huì)議室的權(quán)限
public boolean canJoin(ChatUser user)
{
	boolean ret=false;
	String vrType=this.getVrtype();	
	if(vrType==null || (vrType.trim().equals("")))//所有人都能進(jìn)入
	{
		ret=true;
	}
	else//判斷訪問權(quán)限
	{	
     //	會(huì)員
	if(vrType.equals("user"))
	{
		//ret=user!=null;	
	}			
	else if(vrType.equals("score"))//積分限制
	{
		//ret= user.getScore().intValue()>new Integer(this.getVrvalue()).intValue();		
	}	
	else if(vrType.equals("member"))
	{
		//ret=user.getTypes()!=null && (!user.getTypes().equals("")) && user.checkUserRole("member");	
	}
	else if(vrType.equals("admin"))
	{
		//ret=user.getTypes()!=null && (!user.getTypes().equals("")) && user.checkUserRole("admin");	
	}
	}
	return ret;
}
//檢測用戶是否具有發(fā)言權(quán)限
public boolean canTalk(String userName)
{
	if(this.getStatus()>0)
	{		
		return (this.getCurrentTalker().getUserName().equals(userName));
	}
	else return true;
}
//讀取N條最新的發(fā)言信息
public List getNewestMsg(ChatUser user,String lastReadId)//根據(jù)上次讀出的Id號讀出聊天信息
{
	List ret=new ArrayList();
	user.setLastAccessTime(new Date());
	long now=System.currentTimeMillis();
	for(int i=msgs.size()-1;i>=0;i--)
	{
	Chat info=(Chat)msgs.get(i);
	if((now-info.getVdate().getTime()>this.interval)||(info.getCid().equals(lastReadId)))break;	
	ret.add(0,info);
	}	
	return ret;
}
public String geneId()
{
	Random r = new Random(10);   
	String id = System.currentTimeMillis()+""+r.nextInt();
	return id;
}
public String geneGuest()
{
	int i=this.users.size()+1;
	String userName="guest"+i;
	if(this.users.contains(userName))userName="guest_"+i;	
	return userName;
}
//刷新信息,保存會(huì)議信息
public void flash()
{
	flashChatMsg();
	flashChatUser();
}
public void flashChatMsg()
{
	long now=System.currentTimeMillis();
	List delList=new ArrayList();
	for(int i=0;i<msgs.size();i++)
	{
		Chat info=(Chat)msgs.get(i);
		if((now-info.getVdate().getTime())>this.interval)delList.add(0,info);
	}
   StringBuffer s=new StringBuffer(1024);
   for(int i=0;i<delList.size();i++)
   {
	   Chat info=(Chat)msgs.get(i);
	   s.append("<font color=blue>"+info.getSender()+"</font>對<font color=blue>"+info.getReciver()+"</font>說:"+info.getContent()+"("+info.getVdate()+")\r\n");
   }
   if(s.length()>1)  saveToFile(s.toString());
   msgs.removeAll(delList);
}
public void flashChatUser()
{
	long now=System.currentTimeMillis();
	List delList=new ArrayList();
	for(int i=0;i<users.size();i++)
	{
		ChatUser info=(ChatUser)users.get(i);
		if((now-info.getLastAccessTime().getTime())>this.interval)delList.add(0,info);		
	}  
   for(int i=0;i<delList.size();i++)
   {
	   ChatUser info=(ChatUser)delList.get(i);	   
	   this.talk(geneSystemMsg(info.getUserName()+"非正常退出會(huì)議!"));
   } 
   users.removeAll(delList);
}
private void saveToFile(String s)
{
	try{
	File file=new File(filePath+"/"+this.title+"_"+df.format(new Date())+".txt");
	if(!file.getParentFile().exists())file.getParentFile().mkdirs();
	OutputStream o=new FileOutputStream(file,true);	
	OutputStreamWriter out=new OutputStreamWriter(o,"utf-8");	
	out.write(s);
	out.close();
	}
	catch(Exception e)
	{
		e.printStackTrace();
	}
}
//刷新信息,保存會(huì)議信息
public void flashAll()
{
	StringBuffer s=new StringBuffer(1024);
	for(int i=0;i<msgs.size();i++)
	{
	  Chat info=(Chat)msgs.get(i);
	  s.append(info.getSender()+"對"+info.getReciver()+"說:"+info.getContent()+"("+info.getVdate()+")\r\n");
	}
	msgs.clear();
	saveToFile(s.toString());
}


public int getInterval() {
	return interval;
}
public void setInterval(int interval) {
	this.interval = interval;
}

public int getMaxUser() {
	return maxUser;
}
public void setMaxUser(int maxUser) {
	this.maxUser = maxUser;
}
public String getVrtype() {
	return vrtype;
}
public void setVrtype(String vrtype) {
	this.vrtype = vrtype;
}
public String getVrvalue() {
	return vrvalue;
}
public void setVrvalue(String vrvalue) {
	this.vrvalue = vrvalue;
}
public int getStatus() {
	return status;
}
public void setStatus(int status) {
	this.status = status;
}

public List getTalkers() {
	return talkers;
}

public List getUsers() {
	return users;
}

public Talker getCurrentTalker() {
	return currentTalker;
}
public void setCurrentTalker(Talker currentTalker) {
	this.currentTalker = currentTalker;
}

public String getIntro() {
	return intro;
}
public void setIntro(String intro) {
	this.intro = intro;
}
public String getOwner() {
	return owner;
}
public void setOwner(String owner) {
	this.owner = owner;
}
public String getTitle() {
	return title;
}
public void setTitle(String title) {
	this.title = title;
}
public List getManager() {
	return manager;
}

public String getFilePath() {
	return filePath;
}

public void setFilePath(String filePath) {
	this.filePath = filePath;
}

public String getCid() {
	return cid;
}

public void setCid(String cid) {
	this.cid = cid;
}

public String getAnnounce() {
	return announce;
}

public void setAnnounce(String announce) {
	this.announce = announce;
}

public String getPassword() {
	return password;
}
public void setPassword(String password) {
	this.password = password;
}

/**
	 * @param args
	 */
public static void main(String[] args) {
		// TODO Auto-generated method stub
	}
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲一区二区在线观看视频| 色婷婷综合久久久中文字幕| 欧美色综合网站| 亚洲人快播电影网| 99视频热这里只有精品免费| 久久久一区二区三区捆绑**| 免费观看在线色综合| 欧美一区二区三区在线观看视频| 一区二区高清在线| 日韩精品自拍偷拍| 日韩高清不卡一区二区三区| 日韩一区二区精品在线观看| 久久99精品一区二区三区三区| 欧美伦理视频网站| 精品影院一区二区久久久| 日韩精品专区在线影院重磅| 久久精品久久综合| 国产精品美女久久久久高潮| 99这里只有精品| 水野朝阳av一区二区三区| 91精品国产综合久久久久久久久久| 免费在线一区观看| 中文字幕一区二区三区不卡| 欧美日韩中文字幕一区| 久久99精品国产.久久久久久| 久久精品男人天堂av| 色播五月激情综合网| 蜜桃在线一区二区三区| 欧美国产视频在线| 7777精品伊人久久久大香线蕉超级流畅 | 在线91免费看| 粉嫩欧美一区二区三区高清影视| 亚洲乱码日产精品bd| 精品国产网站在线观看| 色妹子一区二区| 国内精品国产成人| 视频一区二区欧美| 中文字幕在线一区二区三区| 欧美一区二区三区的| 日本道色综合久久| 亚洲成人午夜电影| 亚洲欧洲日韩在线| 欧美三电影在线| 亚洲综合一二三区| 国产精品短视频| 久久婷婷色综合| 欧美成人午夜电影| 日韩午夜精品视频| 欧美成人r级一区二区三区| 欧美这里有精品| 欧美日韩久久不卡| 91精品欧美综合在线观看最新| 91亚洲男人天堂| 成人av电影免费观看| 波多野结衣亚洲| 91色视频在线| 欧美日韩和欧美的一区二区| 欧美在线不卡一区| 这里是久久伊人| wwwwww.欧美系列| 久久精品视频免费| 精品国产一区二区三区久久影院| 日韩亚洲欧美一区| 久久亚洲免费视频| 中文字幕一区在线观看| 亚洲综合区在线| 美女视频免费一区| 99精品国产热久久91蜜凸| 日本道精品一区二区三区| 日韩欧美国产精品一区| 国产精品人人做人人爽人人添 | 色综合天天综合网天天看片| 欧洲av一区二区嗯嗯嗯啊| 精品国产露脸精彩对白| 伊人婷婷欧美激情| 国产成人在线视频网站| 在线观看日韩电影| 国产三级欧美三级| 亚洲午夜免费电影| 国产一区中文字幕| 欧美日韩在线三级| 国产精品三级视频| 国产一区二区三区在线观看免费| 99久久精品国产导航| 久久久精品2019中文字幕之3| 国产视频亚洲色图| 韩国av一区二区三区| 精品视频在线免费观看| 国产精品成人免费在线| 国产精品99久久久久久有的能看| 欧美日韩一级片网站| 日韩国产欧美在线播放| 成人av资源在线观看| 国产亚洲精久久久久久| 久久精品国产成人一区二区三区| 欧美日韩在线一区二区| 性欧美大战久久久久久久久| 色综合久久久久久久久久久| 国产精品全国免费观看高清 | 国产精品情趣视频| 国产精品综合二区| 国产精品视频你懂的| 国产成人av电影在线播放| 欧美国产国产综合| 成人教育av在线| 伊人夜夜躁av伊人久久| 欧洲色大大久久| 日韩成人av影视| 日韩精品专区在线影院重磅| 国产一区 二区| 亚洲欧洲三级电影| 日韩免费一区二区| 国产在线观看免费一区| 久久精品一区蜜桃臀影院| 99精品欧美一区二区三区小说| 玉足女爽爽91| 日韩三级在线免费观看| 国产成人午夜精品5599| 亚洲裸体在线观看| 日韩欧美一区二区免费| 丰满亚洲少妇av| 亚洲精品va在线观看| 欧美成人激情免费网| 91网页版在线| 国产一区欧美日韩| 夜色激情一区二区| 欧美韩日一区二区三区四区| 欧美夫妻性生活| 91农村精品一区二区在线| 欧美bbbbb| 亚洲欧美成aⅴ人在线观看| 欧美一级一区二区| 色婷婷久久综合| 欧美嫩在线观看| 福利电影一区二区三区| 久久99精品国产.久久久久| 亚洲综合区在线| 亚洲欧美中日韩| 国产精品久线在线观看| 日韩欧美一卡二卡| 欧美日韩一区久久| 欧美日精品一区视频| aaa欧美色吧激情视频| 国产福利精品导航| 国产一区二区久久| 国产精品影视在线观看| 久久99精品久久久久久动态图 | 国产无一区二区| 久久久久久久久免费| 久久久久久久久99精品| 欧美大尺度电影在线| 日韩一区二区三区免费观看| 欧美一区二区在线不卡| 欧美精品v日韩精品v韩国精品v| 欧美日本不卡视频| 中文字幕精品一区二区精品绿巨人| 91精品国产手机| 精品噜噜噜噜久久久久久久久试看 | 国产精品538一区二区在线| 精彩视频一区二区| 成人app下载| 欧美肥妇free| 久久精子c满五个校花| 成人免费视频在线观看| 亚洲伊人色欲综合网| 裸体歌舞表演一区二区| 国产精品系列在线观看| 99精品热视频| 精品三级在线观看| 亚洲视频一二三| 老司机一区二区| 99久久夜色精品国产网站| 色乱码一区二区三区88| 91精品国产美女浴室洗澡无遮挡| 久久久精品一品道一区| 亚洲一区二区在线观看视频| 麻豆免费看一区二区三区| 99视频超级精品| 欧美成人三级在线| 亚洲欧美经典视频| 国产一区中文字幕| 日韩手机在线导航| 一区二区三区国产豹纹内裤在线 | 国产一区二区三区久久久| 色综合久久久久久久久久久| 2017欧美狠狠色| 五月天国产精品| 欧美综合亚洲图片综合区| 国产精品全国免费观看高清| 精品影院一区二区久久久| 欧美裸体一区二区三区| 一区二区三区在线观看动漫| 成人av一区二区三区| 精品va天堂亚洲国产| 久久se精品一区精品二区| 日韩欧美电影一区| 日本不卡免费在线视频| 51久久夜色精品国产麻豆| 国产成人精品在线看| 欧美成人性福生活免费看|