Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(711)

Unified Diff: mojo/spy/websocket_server.cc

Issue 284743002: Adding a mojo interface to the mojo spy. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: clang 2 Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « mojo/spy/websocket_server.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: mojo/spy/websocket_server.cc
diff --git a/mojo/spy/websocket_server.cc b/mojo/spy/websocket_server.cc
index 649a135c13e81fb363db3b878ad8833343ce515c..15a0c4e81fd30dc6710f021cfb166b9cb7aaf4eb 100644
--- a/mojo/spy/websocket_server.cc
+++ b/mojo/spy/websocket_server.cc
@@ -4,20 +4,30 @@
#include "mojo/spy/websocket_server.h"
+#include <string>
+
#include "base/bind.h"
#include "base/strings/stringprintf.h"
+
+#include "mojo/public/cpp/bindings/allocation_scope.h"
+#include "mojo/public/cpp/bindings/message.h"
+
#include "net/base/ip_endpoint.h"
#include "net/base/net_errors.h"
#include "net/server/http_server_request_info.h"
#include "net/server/http_server_response_info.h"
#include "net/socket/tcp_listen_socket.h"
-namespace spy {
+namespace mojo {
const int kNotConnected = -1;
-WebSocketServer::WebSocketServer(int port)
- : port_(port), connection_id_(kNotConnected) {
+WebSocketServer::WebSocketServer(int port,
+ mojo::ScopedMessagePipeHandle server_pipe)
+ : port_(port),
+ connection_id_(kNotConnected),
+ spy_server_(MakeProxy<spy_api::SpyServer>(server_pipe.Pass())) {
+ spy_server_->SetClient(this);
}
WebSocketServer::~WebSocketServer() {
@@ -25,9 +35,9 @@ WebSocketServer::~WebSocketServer() {
bool WebSocketServer::Start() {
net::TCPListenSocketFactory factory("0.0.0.0", port_);
- server_ = new net::HttpServer(factory, this);
+ web_server_ = new net::HttpServer(factory, this);
net::IPEndPoint address;
- int error = server_->GetLocalAddress(&address);
+ int error = web_server_->GetLocalAddress(&address);
port_ = address.port();
return (error == net::OK);
}
@@ -35,7 +45,7 @@ bool WebSocketServer::Start() {
void WebSocketServer::OnHttpRequest(
int connection_id,
const net::HttpServerRequestInfo& info) {
- server_->Send500(connection_id, "websockets protocol only");
+ web_server_->Send500(connection_id, "websockets protocol only");
}
void WebSocketServer::OnWebSocketRequest(
@@ -45,26 +55,63 @@ void WebSocketServer::OnWebSocketRequest(
// Reject connection since we already have our client.
base::MessageLoop::current()->PostTask(
FROM_HERE,
- base::Bind(&net::HttpServer::Close, server_, connection_id));
+ base::Bind(&net::HttpServer::Close, web_server_, connection_id));
return;
}
// Accept the connection.
- server_->AcceptWebSocket(connection_id, info);
+ web_server_->AcceptWebSocket(connection_id, info);
connection_id_ = connection_id;
}
void WebSocketServer::OnWebSocketMessage(
int connection_id,
const std::string& data) {
- // TODO(cpu): remove this test code soon.
- if (data == "\"hello\"")
- server_->SendOverWebSocket(connection_id, "\"hi there!\"");
+ AllocationScope scope;
+ if (data == "\"start\"") {
+ spy_api::Version::Builder vb;
+ vb.set_major(0);
+ vb.set_minor(1);
+ spy_server_->StartSession(
+ vb.Finish(),
+ base::Bind(&WebSocketServer::OnStartSession, base::Unretained(this)));
+ } else if (data == "\"stop\"") {
+ spy_server_->StopSession(
+ base::Bind(&WebSocketServer::OnSessionEnd, base::Unretained(this)));
+ }
+}
+
+void WebSocketServer::OnFatalError(spy_api::Result result) {
+ web_server_->SendOverWebSocket(connection_id_, "\"fatal error\"");
}
void WebSocketServer::OnClose(
int connection_id) {
- if (connection_id == connection_id_)
- connection_id_ = kNotConnected;
+ if (connection_id != connection_id_)
+ return;
+ connection_id_ = kNotConnected;
+ AllocationScope scope;
+ spy_server_->StopSession(
+ base::Bind(&WebSocketServer::OnSessionEnd, base::Unretained(this)));
+}
+
+void WebSocketServer::OnSessionEnd(spy_api::Result result) {
+ // Called when the spy session (not the websocket) ends.
+}
+
+void WebSocketServer::OnClientConnection(
+ const mojo::String& name,
+ uint32_t id,
+ spy_api::ConnectionOptions options) {
+ std::string cc("\"");
+ cc += name.To<std::string>() + "\"";
+ web_server_->SendOverWebSocket(connection_id_, cc);
+}
+
+void WebSocketServer::OnMessage(const spy_api::Message& message) {
+}
+
+void WebSocketServer::OnStartSession(spy_api::Result, mojo::String) {
+ web_server_->SendOverWebSocket(connection_id_, "\"ok start\"");
}
-} // namespace spy
+} // namespace mojo
« no previous file with comments | « mojo/spy/websocket_server.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698