gatewayworker长连接下聊天页面之聊天记录初始化

gatewayworker长连接下聊天页面之聊天记录初始化
针对课程:https://study.163.com/course/courseLearn.htm?courseId=1005015012#/learn/video?lessonId=1051355043&courseId=1005015012

前端页面:

var fromid = {$fromid};
var toid = {$toid};
var API_URL = "/api/chat/";
var from_head = '';
var to_head = '';
var to_name='';
$(".send-btn").click(function(){
ver text = $(".send-input").val();

var message = '{"data":"'+text+'","type":"say","fromid":"'+fromid+'","toid":"'+toid+'"}';
$(".chat-content").append('<div><span style="background-image:url('+from_head+')"></span>'+text+'</div>');
ws.send(message);
$(".send-input").val("");
})


}

ws.onmessage = function(e){
var  message = eval("("+e.data+")"); //将客户端收到的json转换成js数据
switch(message.type){
case "init":
var bind = '{"type":'bind',"fromid":"'+fromid+'"}';
ws.send(bind);
get_head(fromid,toid);
get_name(toid);
message_load();//当页面加载的时候,执行。





ruturn;

case "text":

if(toid==message.fromid){
$(".chat-content").append('<div><span style="background-image:url('+to_head+')"></span>'+message.data+'</div>');
}
retrun;

case "save":
save_message(message);
return;

}
}

function save_message(message){
$.post(
API_URL+"save_message",
message,
function(){},'json'
)
}

function  get_head(fromid,toid){
$.post(
API_URL+"get_head",
{"fromid":fromid,"toid":toid},
function(e){
from_head = e.from_head;
to_head = e.from_head;
},'json'
);

}

function get_name(toid){
$.post(
API_URL+"get_name",
{"uid"::toid},
function(e){
to_name = e.toname;
$(".shop-title").text("对方用户昵称是:"+toname);
console.log(e);
},'json'
);
}


function message_load()
{
$.post(
API_URL+"load",
{"fromd":fromid,"toid":toid},
function(e){
//循环输出数据
$.each(e,function(index,content)){

//index是数据的下标
if(fromid==content.fromid){
//我发给对方的信息,要展示在右侧
$(".chat-content").append('<div><span style="background-image:url('+from_head+')"></span>'+content.content+'</div>');
}else{
//对方发送数据,展示在左侧
$(".chat-content").append('<div><span style="background-image:url('+to_head+')"></span>'+content.content+'</div>');
}
})

},'json'
);
};

API模块下,Chat控制器:

namespace app\api\controller;

class Chat extends Controller{

/*文本消息的数据持久化*/
public function save_message(){
if(Request::instance()->isAjax()){
$message = input("post.");
$datas['fromid'] = $message['fromid'];
$datas['fromname'] =$this->getName($datas['fromid']) ;
$datas['toid'] = $message['toid'];
$datas['toname'] =$this->getName($datas['toid']) ;
$datas['content'] = $message['data'];
$datas['time'] = $message['time'];
$datas['isread'] = $message['isread'];
$datas['type'] = 1 ;//文本为1,图片为2
Db::name("communication")->insert($datas);

}
}


/*根据用户id,返回用户的姓名*/
public function getName($uid){
$userinfo = Db::name("user")->where('id',$uid)->field('nickname')->find();
return $userinfo['nickname'];


/*获取用户头像*/

public function get_head(){
if(Request::instance()->isAjax()){
$fromid = input('fromid');
$toid = input('toid');
$frominfo =Db::name("user")->where('id',$fromid)->field('headimgurl')->find();
$toinfo =Db::name("user")->where('id',$toid)->field('headimgurl')->find();
return[
'from_head' =>$frominfo['headimgurl'],
'to_head' =>$toinfo['headimgurl']
];


}
}

/*获取用户名称*/

public function get_name(){

if(Request::instance()->isAjax()){
$uid = input('uid');

$toinfo =Db::name("user")->where('id',$uid)->field('nickname')->find();

return[
'to_name' =>$toinfo['nickname']
];
}
}


/*获取用户聊天记录*/

public function load(){

if(Request::instance()->isAjax()){
$fromid = input('fromid');
$toid = input('toid');

$count =Db::name("communication")->where('(fromid=:fromid and toid=:toid) || (fromid=:toid1 and toid=:fromid1)',['fromid'=>$fromid,'toid'=>$toid,'toid1'=>$toid,'fromid1'=>$fromid])->field('nickname')->count('id'); //:***的方式是占位符,参考http://blog.51cto.com/wujuxiang/403679

if($count>=10){
$message = Db::name("communication")->where('(fromid=:fromid and toid=:toid) || (fromid=:toid1 and toid=:fromid1)',['fromid'=>$fromid,'toid'=>$toid,'toid1'=>$toid,'fromid1'=>$fromid])->field('nickname')->limit($count-10,10)->order('id')->select(); //:***的方式是占位符,参考http://blog.51cto.com/wujuxiang/403679}
}else{
$message =Db::name("communication")->where('(fromid=:fromid and toid=:toid) || (fromid=:toid1 and toid=:fromid1)',['fromid'=>$fromid,'toid'=>$toid,'toid1'=>$toid,'fromid1'=>$fromid])->field('nickname')->order('id')-->select(); //:***的方式是占位符,参考http://blog.51cto.com/wujuxiang/403679}
return $message;
}
}


}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值