|
<?php |
|
$uid = $_COOKIE['uid']; |
|
if (empty($uid)) |
|
{ |
|
$uid = mt_rand(); |
|
setcookie('uid', $uid, time()+3000, '/', 'dpchat.sinaapp.com', FALSE, TRUE); |
|
} |
|
|
|
$kv = new SaeKV(); |
|
$kv->init(); |
|
$connection = $kv->get('Chat.'.$uid); |
|
if (empty($connection)) |
|
{ |
|
$channel = new SaeChannel(); |
|
$connection = $channel->createChannel('Chat.'.$uid, 3600); |
|
$kv->set('Chat.'.$uid, $connection); |
|
} |
|
?> |
|
<!DOCTYPE html> |
|
<html> |
|
<head> |
|
<meta charset="utf-8" /> |
|
<title>聊天室</title> |
|
<meta http-equiv="X-UA-Compatible" content="IE=edge"> |
|
<meta name="viewport" content="width=device-width, initial-scale=1.0"> |
|
<meta name="author" content="alcoholwang"> |
|
<link rel="stylesheet" href="/assets/css/bootstrap.min.css" type="text/css" /> |
|
<style> |
|
#messages {height:100%;overflow-y:scroll;padding:0;} |
|
#messages li {margin:6px 0;padding:0;list-style:none;} |
|
#messages li span.label {cursor:pointer;} |
|
</style> |
|
<!--[if lt IE 9]> |
|
<script src="/assets/js/html5shiv.min.js" type="text/javascript"></script> |
|
<script src="/assets/js/respond.min.js" type="text/javascript"></script> |
|
<![endif]--> |
|
<script src="/assets/js/jquery.min.js" type="text/javascript"></script> |
|
<script src="/assets/js/bootstrap.min.js" type="text/javascript"></script> |
|
<script src='http://channel.sinaapp.com/api.js'></script> |
|
</head> |
|
<body> |
|
|
|
<div class="container"> |
|
<div class="panel panel-warning"> |
|
<div class="panel-heading"> |
|
<h3 class="panel-title">聊天内容</h3> |
|
</div> |
|
<div class="panel-body"> |
|
<ul id="messages"></ul> |
|
</div> |
|
<div class="panel-footer clearfix"> |
|
<div class="col-sm-11"> |
|
<input type="text" class="form-control" id="message" placeholder="聊天内容" /> |
|
</div> |
|
<div class="col-sm-1"> |
|
<button type="button" class="btn btn-success" id="messageSure">发送</button> |
|
</div> |
|
</div> |
|
</div> |
|
</div> |
|
|
|
<div class="modal fade" id="nicknameModal" tabindex="-1" role="dialog" data-backdrop="static" data-keyboard="false" data-show="show"> |
|
<div class="modal-dialog"> |
|
<div class="modal-content"> |
|
<div class="modal-header"> |
|
<h4 class="modal-title">你的昵称</h4> |
|
</div> |
|
<div class="modal-body"> |
|
<input type="text" class="form-control" id="nickname" placeholder="昵称" /> |
|
</div> |
|
<div class="modal-footer"> |
|
<button type="button" class="btn btn-success" id="nicknameSure">确定</button> |
|
</div> |
|
</div> |
|
</div> |
|
</div> |
|
|
|
<script> |
|
jQuery(document).ready(function($) { |
|
$('.panel-body').outerHeight($(document).innerHeight() - $('.panel-heading').outerHeight() - $('.panel-footer').outerHeight() - 150); |
|
var $channel = {'connection':'<?=$connection?>', 'nickname':'', 'socket':null}; |
|
|
|
$channel.sendMessage = function(data) { |
|
$.post('/ping', data); |
|
$channel.socket.send(data); |
|
console.log(data, $channel.socket); |
|
}; |
|
|
|
$channel.createMessage = function(className, nickname, msg) { |
|
label = $('<span class="label">').addClass('label-' + className).text(nickname).click(function(e){ |
|
e.preventDefault(); |
|
msg = '@' + nickname + ' ' + $('#message').val(); |
|
$('#message').val(msg).focus(); |
|
}); |
|
return $('<li>').html(msg).prepend(label); |
|
}; |
|
|
|
$channel.onOpen = function() { |
|
$channel.sendMessage({'nickname':$channel.nickname, 'event':'enter'}); |
|
$('#message').focus(); |
|
}; |
|
|
|
$channel.onError = function(msg) { |
|
console.log(this, msg); |
|
var li = $('<li>').html('<span class="label label-danger">'+msg+'</span>'); |
|
$('#messages').append(li); |
|
}; |
|
|
|
$channel.onClose = function() { |
|
$channel.sendMessage({'nickname':$channel.nickname, 'event':'exit'}); |
|
$('#message').focus(); |
|
}; |
|
|
|
$channel.onMessage = function(msg) { |
|
if (msg && msg.data) |
|
{ |
|
msg = $.parseJSON(msg.data); |
|
if (msg && msg.nickname && msg.message) |
|
{ |
|
var li = $channel.createMessage('info', msg.nickname, ' 说: ' + msg.message); |
|
$('#messages').append(li); |
|
} |
|
else if (msg.event) |
|
{ |
|
var li = $channel.createMessage((msg.event == 'exit'?'danger':'success'), msg.nickname, ' '+(msg.event == 'exit'?'退出':'进入')+'聊天室。'); |
|
$('#messages').append(li); |
|
} |
|
} |
|
$('#message').focus(); |
|
}; |
|
var requestNickname = function() { |
|
$('.panel-title').html($channel.connection); |
|
$('#nicknameSure').click(function(e){ |
|
e.preventDefault(); |
|
var nickname = $.trim($('#nickname').val()); |
|
if (nickname == '') { |
|
$('#nickname').focus(); |
|
return; |
|
} |
|
$('#nicknameModal').modal('hide'); |
|
$channel.nickname = nickname; |
|
$channel.socket = sae.Channel($channel.connection); |
|
$channel.socket.onopen = $channel.onOpen; |
|
$channel.socket.onmessage = $channel.onMessage; |
|
$channel.socket.onclose = $channel.onClose; |
|
$channel.socket.onerror = $channel.onError; |
|
}); |
|
$('#nicknameModal').modal('show').on('shown.bs.modal', function(){ $('#nickname').focus(); }); |
|
$('#messageSure').click(function(e){ |
|
e.preventDefault(); |
|
var message = $.trim($('#message').val()); |
|
if (message == '') { |
|
$('#message').focus(); |
|
return; |
|
} |
|
$channel.sendMessage({'nickname':$channel.nickname, 'message':message}); |
|
$('#message').val(''); |
|
}); |
|
$('#message').keyup(function(e) { |
|
var code = e.which; |
|
if(code==13) { |
|
e.preventDefault(); |
|
$('#messageSure').trigger('click'); |
|
} |
|
}); |
|
$(window).bind('beforeunload', function(){ |
|
$channel.socket.close(); |
|
return '你确定要离开聊天室吗?'; |
|
}); |
|
}(); |
|
}); |
|
</script> |
|
</body> |
|
</html> |