Browse Source

More updates on chat example

master
Artyom Beilis 12 years ago
parent
commit
f591a952fc
3 changed files with 76 additions and 72 deletions
  1. +8
    -0
      examples/json_rpc_chat/chat.cpp
  2. +6
    -0
      examples/json_rpc_chat/config.js
  3. +62
    -72
      examples/json_rpc_chat/the_chat.html

+ 8
- 0
examples/json_rpc_chat/chat.cpp View File

@@ -65,6 +65,13 @@ public:
}
timer_.expires_from_now(booster::ptime::seconds(1));
timer_.async_wait(boost::bind(&chat::on_timer,booster::intrusive_ptr<chat>(this),_1));
std::cout << "Status: \n"
<< "Waiters: " << waiters_.size() << '\n'
<< "Messages:" << messages_.size() <<'\n'
<< "[";
for(size_t i=0;i<messages_.size();i++)
std::cout << messages_[i] << std::endl;
std::cout <<"]" << std::endl;
}

void get(unsigned from)
@@ -109,6 +116,7 @@ public:
for(size_t i=n;i<messages_.size();i++) {
ar.push_back(messages_[i]);
}
std::cout << "Response to client:" << v << std::endl;
return v;
}
private:


+ 6
- 0
examples/json_rpc_chat/config.js View File

@@ -8,6 +8,12 @@
},
"file_server" : {
"enable" : true,
"alias" : [
{
"url" : "/scripts" ,
"path" : "../../contrib/client_side/jsonrpc"
}
],
"document_root" : "."
},



+ 62
- 72
examples/json_rpc_chat/the_chat.html View File

@@ -6,85 +6,75 @@
<script type="text/javascript" src="/scripts/json2.js"></script>
<script type="text/javascript" src="/scripts/jsonrpc.js"></script>
<title>Chat Room</title>
</head>
<body>
<h1>Chat room</h1>
<script type="text/javascript">
var message_count = 0;
var rpc = new JsonRPC('/rpc',['get'],['post']);
function on_new_data_read(messages)
{
}
function on_error(e)
{
document.GetElementById('error_message').innerHTML = e;
document.GetElementById('reconnect').disabled = false;
}
function post_failed(e)
{
document.GetElementById('error_message').innerHTML = e;
}

rpc.get.on_result = function(messages) {
var messagesHtml = document.GetElementById('messages');
for(message in messages) {
messagesHtml.innerHTML+='<dt>' + message.author +'</dt>' +
'<dd>' + message.message + '</dd>'
message_count++;
}
restart();
}
<script type="text/javascript">
message_count = 0;
rpc = new JsonRPC('/chat',['get'],['post']);

rpc.get.on_error = function(e) {
document.GetElementById('error_message').innerHTML = e;
document.GetElementById('reconnect').disabled = false;
}
rpc.post.on_error = function(e) {
document.GetElementById('error_message').innerHTML = e;
}
rpc.post.on_result = function() {
document.GetElementById
}

function restart()
{
rpc.get(message_count);
}
function make_error(what,e)
{
document.getElementById('error_message').innerHTML = what + ': ' + e.type +': ' + e.error;
}

function send_data() {
var kw = {
url : "/chat/post",
form : "theform"
};
dojo.xhrPost(kw);
dojo.byId("message").value="";
return false;
}
function read_data() {
dojo.xhrGet( {
url: "/chat/get/" + message_count,
timeout: 10000,
handleAs: "text",
load: function(response, ioArgs) {
dojo.byId("messages").innerHTML = response + '<br/>' + dojo.byId("messages").innerHTML;
rpc.get.on_result = function(messages) {
var messagesHtml = document.getElementById('messages');
for(var i=0;i<messages.length;i++) {
m=messages[i];
messagesHtml.innerHTML+='<dt>' + m.author +'</dt>' +
'<dd>' + m.message + '</dd>';
message_count++;
read_data();
return response;
},
error: function(response,ioArgs) {
read_data();
return response;
}
//messagesHtml.innerHTML += '<p>JSON: ' + JSON.stringify(messages) + '</p>' ;

});
}
dojo.addOnLoad(read_data);
</script>
restart();
}

rpc.get.on_error = function(e) {
make_error('Getting New Messages',e);
document.getElementById('reconnect').disabled = false;
}
rpc.post.on_error = function(e) {
make_error('Posting New Messages',e);
}
rpc.post.on_result = function() {
document.getElementById("message").value = '';
}

function restart()
{
rpc.get(message_count);
}
function reconnect_to_server()
{
message_count = 0;
document.getElementById('error_message').innerHTML = '';
restart();
return false;
}

function send_data() {
author = document.getElementById('author').value;
message = document.getElementById("message").value;
rpc.post(author,message);
return false;
}
</script>


</head>
<body onload='restart()'>
<h1>Chat room</h1>
<form id="theform" >
<input id="message" type="text" name="message" value="" />
<p>Name: <input id="author" type="text" value="" /></p>
<p>
Message: <input id="message" type="text" value="" /></p>
<input type="submit" value="Send" onclick="return send_data()"/>
<input disabled="disabled" id='reconnect' type='submit' value='Reconnect' onclick='return reconnect_to_server()'>
</p>
<p id='error_message'></p>
</form>
<div id="messages">
</div>
<dl id="messages">
</dl>
</body>

Loading…
Cancel
Save