Skip to content

arliang/webchat

 
 

Repository files navigation

#配置 1:下载安装node 2:克隆 webchat 项目 3:安装项目的所有中间件(使用npm install完成)

4:创建配置文件 config.js
	
	全局安装fis
	npm install -g fis

	运行
	fis.sh  
	完成以后到  ../online-webchat  下运行 node app.js
	 
/** config.js */
module.exports = {
	
	/**
		database ip
		10.6.0.27
		128.0.0.1
	*/
	dbs:[
        {
            ip:"127.0.0.1",
            port:27017

        }
    ],
	
	/**
		database port
	*/
	port:27017,
	
	/**
		database name
	*/
	dbname:"webchat",
	
	/**
		http server port
	*/
    httpPort:80,
    httpsPort:443,
	
	/**
		cookie domain
	*/
    domain:".vchat.com",
	/**
		photo upload
	*/
	//uploadDir:"d:/github/upload/",
	uploadDir:"/Users/jun/github/upload/",

	/**
		系统保留的子域
	*/
	sysWord: "a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,0,1,2,3,4,5,6,7,8,9,sys,m,user,tmpl,images,image".split(","),

	socketHost:"ws://vchat.com/sys/chat-server",
	/**
		推荐的房间
	*/
	recommendRooms:["1365651264385","1361458149047","1361182575505"]
	

};
内存  free -m  磁盘 df -h  top

#2013/06/14 的想法

即时的语音对话

#新页面设计 对话页面 当前对话信息展示,在线用户,历史在线,主题信息 发布框 多人对话 单独对话 视频和语音扩展

#2013/07/01 vchat.js

vchat.js 插件
让所有网站在线用户拥有即时对话功能。


__vchat_setting = {

	server:document.domain,

	uid: String //每个用户唯一,并且保证不会被冒用
	uname: String //用户名
	uavatar: String URL

}	

#加入 来往纪录 contact 如果你针对某个人回复,则他会在你的来往纪录中出现,在你邀请、@ 的时候这个纪录将作为你的潜在联系对象。

#定义数据体

####用户定义 User

{
	"_id":"514197562128205e66000011",
	"mail":"[email protected]",// 匿名用户的email为一串数字
	"name":"lujun",
	"hexMail":"", // 用户email md5值,也作为头像的网址使用
	"gravatarDefualt":"monsterid",
	"avatar":"http://www.gravatar.com/avatar/d437481aad048f1cb9ff68483c662bae.jpg?s=48&d=monsterid"
	"time": 时间戳/1000 //用户创建时间
}

####房间定义 Room

{
	"id":"1361182575505",//可作为 vchat/id 直接访问房间
	"name":"vchat",//可作为 vchat/name 直接访问房间
	"topic":"vchat开发测试",
	"des":"主题说明文字",
	"masterId":"514197562128205e66000011",//创建者 _id
	"masterName":"lujun", //创建者用户名 (启用)
	"master":User//这里只展现了user的公用信息
}

####对话定义 Chat (已经过期)

{
	_id:"51419a0c2128205e66000024", //数据库唯一 _id
	roomdid: "1361182575505",  //房间 _id
	uid: "514197562128205e66000011", //用户 _id
	uname: "lujun", //用户昵称
	uavatar: "http://www.gravatar.com/avatar/d437481aad048f1cb9ff68483c662bae.jpg?s=48&d=monsterid",
			 // 用户头像地址  遵循 gravatar 网站头像规则
	time: 1363252238, //时间戳/1000
	to:(null || Chat) //如果是回应某个对话有此项目
}

####对话定义 Chat

{
	_id:"51419a0c2128205e66000024", //数据库唯一 _id
	roomdid: "1361182575505",  //房间 _id
	to:User || "*", 如果是两人对话则为User对象,否则为 "*"
	time: 1363252238, //时间戳/1000
	from: User 发送者,
	aim:"51419a0c2128205e660000xx" || null  针对某条信息的回复 
}

####提醒 Notice

{
	_id:"51419a0c2128205e66000024", //数据库唯一 _id
	type:1// 1对话中回复(回复方式) 2对话中提到(@方式) 3邀请加入对话
	form:User, //来自
	to:User._id, //  接收用户的id
	where:Room, //根据type会返回不同的对象
	what:Chat _id, // 数据库id
	response:Chat _id //数据库ID
	status:0 // 0未知晓  1已知晓  2已读(0,1都是未读状态,区别在于用户是否知晓)
	time:1363252238// 消息发生时间 时间戳/1000
}

####图册 Albums

{

	_id: Objectid,// 数据库id
	name: name, // string < 100
	masterId : ObjectId, //所属用户id
	roomId: ObjectId, //所属对话
	des : string,// string < 500
	permissions : 0,//number 0 完全公开 1 半公开 2 房间所有权 3个人所有权
	time : parseInt( Date.now() / 1000 ),
	facePhoto : null,//封面 一个图片地址
	photoCount : 0 //图片数量
}

####图片 Photos

{

	_id : null,//数据库id
	fileName : fileName,//原始文件名
	masterId : masterId,//上传者的id
	albumsId : albumsId,//属于某个相册
	format : format, //图片格式 jpg  bmp  gif ...
	des : string,//string < 500 | 用户为图片添加的描述
	size : 0,//图片大小
	time : parseInt( Date.now() / 1000 );//上传时间
	subdirectory : parseInt( Date.now()/3600000/24 ),// 物理路劲
	features : {} //图片的其他信息
}

####联系 Contact

{
	_id:"",
	sid:"", //记录人 id  send user id
	aid:"", //对方 id  accept user id
	thermograph:Number, //温度计
	time: parseInt( Date.now() / 1000 )
}

####定义接口返回值 return

{
	/**
		code:"msg"
		"0":"正确执行",
		"-1":"参数错误",	
		"-2":"信息重复",
		"500":"服务器错误",
		"600":"数据库错误",
		"601":"数据库错误",
		"403":"Client Access Licenses exceeded(超出客户访问许可证)",
		"404":"not defined",
	*/
	code:0, //代码执行状态  非 0 状态表示非正确执行
	msg: "", //除以上常用状态码文字,其他状态会有更具体说明
	/**
		当 code == 0  result值 可用
		数组 [1,2,3,4,...], 空 -> []
		对象 {a:,b:,c} , 空 -> null
		无返回值 null
	*/
	result: //返回数据
}

#api 文档 仅ajax

####发送一条信息(1)

url: "/sys/post"
method: post
param:
	roomid:number // 房间id
	text:string < 2000
	[aim]:string //回应某条信息的 _id
return:{
	code:0,
	msg:"正确",
	result:Chat
}

####修改昵称(2)

url: "/sys/user-name-update"
method: post
param:
	name: string < 50
return :{
	code:0, //(0, -1),
	msg:"" //(正确,参数错误),
	result:null
}

####匿名用户绑定email(3)

url: "/api/user-mail-set"
method: post
param:
	mail: string //合法的email地址
	pwd: string > 5
return :{
	code:0, //(0, -1, 403),
	msg:"" //(正确, 参数错误, 超出访问权限(已经绑定过了)),
	result:null
}

##修改房间信息,仅房间创建者可修改(4)

url: "/api/room-update"
method:post
param:
	name: string < 50
	topic: string < 500,
	des: string < 2000,
	[password]: string < 30
return:{
	code:0, //(0, -1, 403),
	msg:"", //(正确, 参数错误, 超出访问权限(没有权限修改)),
	result:null
}

####根据时间获取房间对话(5)

url: "/api/room-chat-get"
method:get
param:
	roomid:"1361182575505" //房间id
	/**
		小于此时间戳的最近 size 条信息
		可以使用未来时间戳获取最新的10条
	*/
	time:"时间戳"/1000 
	[size]:10 //默认10条
return:{
	code:0,
	msg:"正确执行",
	result:[Chat,Chat,Chat,.......]
}

####获取我参与过的对话(6)(过期)

url: "/sys/ichats"
method : get
param:null
return:{
	code:0, //(0, -1),
	msg:"正确"  //("正确","参数错误"),
	result:{
		intos:[room, room, ....] //我参与过的对话倒序
		creates:[room, room, ....] //我创建的对话倒序
	}
}

####检查mail是否被注册(7)

url:"/api/user-mail-verify",
method:get
param:
	mail: //一个正确的email
return:{
	code:"0" //0, -2
	msg:"正确"//未注册,已经注册
	result:null
}

####修改用户头像(8)

url: "/sys/user-avatar-update",
method:post,
param:
	gravatarDefault : ("mm", "identicon", "monsterid", "wavatar", "retro", "blank") // 必须是这其中之一
return:{
	code:0,(0, 403)
	msg:"",
	result:null
}

####检查房间快捷访问key是否被注册(9)

url: "/api/room-key-verify",
method:get,
param:
	key : string < 100 // 可以是任意字符
return:{
	code:0,//(0, -2)
	msg:"",//(可用,已经被使用)
	result:null
}

####读取房间历史参与的人的列表(10)

url: "/api/room-visitors-get",
method:get,
param:
	roomid:123456789 //正确的房间id
	[size] :24, // number > 0  需求返回的数量
return:{
	code:0,//(0, -1)
	msg:"",//(可用,参数错误)
	result:[
		user,user,....
	]
}

####修改用户的个人介绍(11)

url: "/api/user-summary-update",
method:post,
param:
	summary: string < 300
return:{
	code:0,//(0, -1)
	msg:"",//(可用,参数错误)
	result:null
}

####获取当前登录用户未读信息条数(12)

url:"/api/notice-count"
method:"get"
param:null,
return :{
	code:0,(0, 301),
	msg:""//(可用, 未登录)
	result: 3//(未读信息条数)
}

####获取前 number 条用户非已读信息(13)

url:"/api/notice-list"
method:"get",
param:{
	[time]:new Date().getTime()+1 //未来时间戳获取最新的 number -- 默认未来时间戳
	[number]:5 //	--默认 5
}
return :{
	code:0,
	msg:"",
	result:[Notice, Noitce, ...]
}

####改变提醒的状态(理论上只允许标记为 2 已读)(14)

url:"/api/notice-status"
method:"post",
param:{
	_id: ,//信息_id
	[status]:2,//默认2
}
return :{
	code:0,
	msg:"",
	result:null
}

####删除一张或者多张照片(15)

url:"/p/sys/delete-photo"
method:"post",
param:{
	ids:""//字符串,多个id用逗号分割
}
return :{
	code:0,
	msg:"",
	result:ids// 已经被删除的photo id
}

##vchat.js接口

####登录vchat 17号

/**
	uid为空
		创建uid账户,下次可使用uid登录
	uid有值
		查询uid是否注册,若已经注册直接登录到账户
		未注册使用uid创建账户

*/
url:"/sys/vchat-create"
method:"post",
param:{
	server: //必选
	uid:"自动生成一个24位MD5值" //可选
	uname: "匿名"//可选
	uavatar: ""//可选
}

return {
	code:0,
	msg:"",
	result:{
		user:User,
		multiple:User, //留言器已经保存在用户
		roomid:13623984732, //server对应的roomid,
		isNew:[0,1]// 0旧账户  1新账户
	}
}

####登录 chat server 18

/**
	uid为空
		创建uid账户,下次可使用uid登录
	uid有值
		查询uid是否注册,若已经注册直接登录到账户
		未注册使用uid创建账户

*/
url:"/sys/vchat-login"
method:"post",
param:{
	domain: //必选
	uid:"自动生成一个24位MD5值" //可选
	uname: "匿名"//可选
	uavatar: ""//可选
}

return {
	code:0,
	msg:"",
	result:{
		user:User,
		multiple:User, //留言器已经保存在用户
		roomid:13623984732, //server对应的roomid,
		isNew:[0,1]// 0旧账户  1新账户
	}
}

####创建对话 20

	
	url:"/api/room-create"
	method:post
	param:
		topic:string < 140,
		[des]:string < 300,
		[pwd]: string < 16
	
	return {
		code:0,
		msg:"",
		result:Room
	}
	 

####获取我的往来纪录 21(默认按照热度倒叙排列)

	
	url:"/api/user-contact-get"
	method:get
	param:
		[limit]:number || 20

	return {
		code:0,
		msg:"",
		result:[User,User]
	} 

####检索 topic 22

	
	url:"/api/room-search"
	method:get
	param:
		key:string < 20

	return {
		code:0,
		msg:"",
		result:[Room,Room]
	} 

####邀请好友加入对话 topic 23

	
	url:"/api/room-inviteh"
	method:get
	param:
		_ids: string // "_id,_id"以逗号分割的用户id
		mails: string //以 逗号分割的 e-mail
		roomid: 邀请到的房间

	return {
		code:0,
		msg:"",
		result:true
	} 

####关闭一个我自己创建的话题 topic 24

	
	url:"/api/room-set-close"
	method:post
	param:
		id:Room.id
	return {
		code:0,// 304
		msg:"",
		result:true
	} 

####开启一个我自己创建的话题 topic 25

	
	url:"/api/room-set-open"
	method:post
	param:
		id:Room.id
	return {
		code:0,// 304
		msg:"",
		result:true
	} 

####通知 text socket server 有人视频上线 topic 26 内部接口

	
	url:"/api/video-online"
	method:get
	param:
		roomid:
		uid:
	return {
		code:0,// 304
		msg:"",
		result:true
	} 

####通知 text socket server 有人视频下线 topic 27 内部接口

	
	url:"/api/video-offline"
	method:get
	param:
		roomid:
		uid:
	return {
		code:0,// 304
		msg:"",
		result:true
	} 

Packages

No packages published

Languages

  • JavaScript 80.2%
  • CSS 19.0%
  • Shell 0.8%