Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // This file is generated | 1 // This file is generated |
| 2 | 2 |
| 3 // Copyright (c) 2016 The Chromium Authors. All rights reserved. | 3 // Copyright (c) 2016 The Chromium Authors. All rights reserved. |
| 4 // Use of this source code is governed by a BSD-style license that can be | 4 // Use of this source code is governed by a BSD-style license that can be |
| 5 // found in the LICENSE file. | 5 // found in the LICENSE file. |
| 6 | 6 |
| 7 #include {{format_include(config.protocol.package, domain.domain)}} | 7 #include {{format_include(config.protocol.package, domain.domain)}} |
| 8 | 8 |
| 9 #include {{format_include(config.protocol.package, "Protocol")}} | 9 #include {{format_include(config.protocol.package, "Protocol")}} |
| 10 | 10 |
| (...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 137 {% endfor %} | 137 {% endfor %} |
| 138 } // namespace {{param.name | to_title_case}}Enum | 138 } // namespace {{param.name | to_title_case}}Enum |
| 139 } // namespace {{command.name | to_title_case }} | 139 } // namespace {{command.name | to_title_case }} |
| 140 } // namespace API | 140 } // namespace API |
| 141 {% endif %} | 141 {% endif %} |
| 142 {% endif %} | 142 {% endif %} |
| 143 {% endfor %} | 143 {% endfor %} |
| 144 {% endfor %} | 144 {% endfor %} |
| 145 | 145 |
| 146 // ------------- Frontend notifications. | 146 // ------------- Frontend notifications. |
| 147 | |
| 148 namespace { | |
| 149 | |
| 150 class Notification : public Serializable { | |
|
dgozman
2016/11/21 22:29:16
This should not be in template - it will be genera
kozy
2016/11/22 01:25:38
Done.
| |
| 151 public: | |
| 152 static std::unique_ptr<Notification> create(const String& method, std::uniqu e_ptr<Serializable> params = nullptr) | |
| 153 { | |
| 154 return std::unique_ptr<Notification>(new Notification(method, std::move( params))); | |
| 155 } | |
| 156 | |
| 157 std::unique_ptr<protocol::Value> serializeValue() const override | |
| 158 { | |
| 159 std::unique_ptr<DictionaryValue> result = DictionaryValue::create(); | |
| 160 result->setString("method", m_method); | |
| 161 std::unique_ptr<DictionaryValue> params; | |
| 162 if (!m_params) | |
| 163 params = DictionaryValue::create(); | |
|
dgozman
2016/11/21 22:29:16
4 spaces
kozy
2016/11/22 01:25:38
Done.
| |
| 164 else | |
| 165 params = std::unique_ptr<DictionaryValue>(static_cast<DictionaryValue* >(m_params->serializeValue().release())); | |
| 166 result->setObject("params", std::move(params)); | |
| 167 return result; | |
| 168 } | |
| 169 | |
| 170 protected: | |
| 171 Notification(const String& method, std::unique_ptr<Serializable> params) | |
| 172 : m_method(method) | |
| 173 , m_params(std::move(params)) | |
| 174 { | |
| 175 } | |
| 176 | |
| 177 private: | |
| 178 String m_method; | |
| 179 std::unique_ptr<Serializable> m_params; | |
| 180 }; | |
| 181 | |
| 182 } // namespace | |
| 183 | |
| 147 {% for event in domain.events %} | 184 {% for event in domain.events %} |
| 148 {% if not generate_event(domain.domain, event.name) %}{% continue %}{% endif %} | 185 {% if not generate_event(domain.domain, event.name) %}{% continue %}{% endif %} |
| 149 | 186 |
| 150 void Frontend::{{event.name | to_method_case}}( | 187 void Frontend::{{event.name | to_method_case}}( |
| 151 {%- for parameter in event.parameters %} | 188 {%- for parameter in event.parameters %} |
| 152 {% if "optional" in parameter -%} | 189 {% if "optional" in parameter -%} |
| 153 Maybe<{{resolve_type(parameter).raw_type}}> | 190 Maybe<{{resolve_type(parameter).raw_type}}> |
| 154 {%- else -%} | 191 {%- else -%} |
| 155 {{resolve_type(parameter).pass_type}} | 192 {{resolve_type(parameter).pass_type}} |
| 156 {%- endif %} {{parameter.name}}{%- if not loop.last -%}, {% endif -%} | 193 {%- endif %} {{parameter.name}}{%- if not loop.last -%}, {% endif -%} |
| 157 {% endfor -%}) | 194 {% endfor -%}) |
| 158 { | 195 { |
| 159 std::unique_ptr<protocol::DictionaryValue> jsonMessage = DictionaryValue::cr eate(); | 196 if (!m_frontendChannel) |
| 160 jsonMessage->setString("method", "{{domain.domain}}.{{event.name}}"); | 197 return; |
| 161 std::unique_ptr<protocol::DictionaryValue> paramsObject = DictionaryValue::c reate(); | 198 {% if event.parameters %} |
| 162 {% for parameter in event.parameters %} | 199 std::unique_ptr<{{event.name | to_title_case}}Notification> messageData = {{ event.name | to_title_case}}Notification::{{"create" | to_method_case}}() |
| 163 {% if "optional" in parameter %} | 200 {% for parameter in event.parameters %} |
| 201 {% if not "optional" in parameter %} | |
| 202 .{{"set" | to_method_case}}{{parameter.name | to_title_case}}({{resolve_ type(parameter).to_pass_type % parameter.name}}) | |
| 203 {% endif %} | |
| 204 {% endfor %} | |
| 205 .{{ "build" | to_method_case }}(); | |
| 206 {% for parameter in event.parameters %} | |
| 207 {% if "optional" in parameter %} | |
| 164 if ({{parameter.name}}.isJust()) | 208 if ({{parameter.name}}.isJust()) |
| 165 paramsObject->setValue("{{parameter.name}}", ValueConversions<{{resolve_ type(parameter).raw_type}}>::serialize({{parameter.name}}.fromJust())); | 209 messageData->{{"set" | to_method_case}}{{parameter.name | to_title_case} }(std::move({{parameter.name}}).takeJust()); |
| 210 {% endif %} | |
| 211 {% endfor %} | |
| 212 m_frontendChannel->sendProtocolNotification(Notification::create("{{domain.d omain}}.{{event.name}}", std::move(messageData))); | |
| 166 {% else %} | 213 {% else %} |
| 167 paramsObject->setValue("{{parameter.name}}", ValueConversions<{{resolve_type (parameter).raw_type}}>::serialize({{resolve_type(parameter).to_raw_type % param eter.name}})); | 214 m_frontendChannel->sendProtocolNotification(Notification::create("{{domain.d omain}}.{{event.name}}")); |
| 168 {% endif %} | 215 {% endif %} |
| 169 {% endfor %} | |
| 170 jsonMessage->setObject("params", std::move(paramsObject)); | |
| 171 if (m_frontendChannel) | |
| 172 m_frontendChannel->sendProtocolNotification(jsonMessage->toJSONString()) ; | |
| 173 } | 216 } |
| 174 {% endfor %} | 217 {% endfor %} |
| 175 | 218 |
| 176 void Frontend::flush() | 219 void Frontend::flush() |
| 177 { | 220 { |
| 178 m_frontendChannel->flushProtocolNotifications(); | 221 m_frontendChannel->flushProtocolNotifications(); |
| 179 } | 222 } |
| 180 | 223 |
| 224 namespace { | |
| 225 | |
| 226 class RawNotification : public Serializable { | |
| 227 public: | |
| 228 explicit RawNotification(const String& notification) | |
| 229 : m_notification(notification) | |
| 230 { | |
| 231 } | |
| 232 | |
| 233 std::unique_ptr<protocol::Value> serializeValue() const override { | |
| 234 return SerializedValue::create(m_notification); | |
| 235 } | |
| 236 | |
| 237 private: | |
| 238 String m_notification; | |
| 239 }; | |
| 240 | |
| 241 } // namespace | |
| 242 | |
| 181 void Frontend::sendRawNotification(const String& notification) | 243 void Frontend::sendRawNotification(const String& notification) |
| 182 { | 244 { |
| 183 m_frontendChannel->sendProtocolNotification(notification); | 245 m_frontendChannel->sendProtocolNotification(std::unique_ptr<Serializable>(ne w RawNotification(notification))); |
| 184 } | 246 } |
| 185 | 247 |
| 186 // --------------------- Dispatcher. | 248 // --------------------- Dispatcher. |
| 187 | 249 |
| 188 class DispatcherImpl : public protocol::DispatcherBase { | 250 class DispatcherImpl : public protocol::DispatcherBase { |
| 189 public: | 251 public: |
| 190 DispatcherImpl(FrontendChannel* frontendChannel, Backend* backend, bool fall ThroughForNotFound) | 252 DispatcherImpl(FrontendChannel* frontendChannel, Backend* backend, bool fall ThroughForNotFound) |
| 191 : DispatcherBase(frontendChannel) | 253 : DispatcherBase(frontendChannel) |
| 192 , m_backend(backend) | 254 , m_backend(backend) |
| 193 , m_fallThroughForNotFound(fallThroughForNotFound) { | 255 , m_fallThroughForNotFound(fallThroughForNotFound) { |
| (...skipping 175 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 369 // static | 431 // static |
| 370 void Dispatcher::wire(UberDispatcher* dispatcher, Backend* backend) | 432 void Dispatcher::wire(UberDispatcher* dispatcher, Backend* backend) |
| 371 { | 433 { |
| 372 dispatcher->registerBackend("{{domain.domain}}", std::unique_ptr<protocol::D ispatcherBase>(new DispatcherImpl(dispatcher->channel(), backend, dispatcher->fa llThroughForNotFound()))); | 434 dispatcher->registerBackend("{{domain.domain}}", std::unique_ptr<protocol::D ispatcherBase>(new DispatcherImpl(dispatcher->channel(), backend, dispatcher->fa llThroughForNotFound()))); |
| 373 } | 435 } |
| 374 | 436 |
| 375 } // {{domain.domain}} | 437 } // {{domain.domain}} |
| 376 {% for namespace in config.protocol.namespace %} | 438 {% for namespace in config.protocol.namespace %} |
| 377 } // namespace {{namespace}} | 439 } // namespace {{namespace}} |
| 378 {% endfor %} | 440 {% endfor %} |
| OLD | NEW |