Chromium Code Reviews| Index: native_client_sdk/src/libraries/nacl_io/devfs/jspipe_node.h |
| diff --git a/native_client_sdk/src/libraries/nacl_io/devfs/jspipe_node.h b/native_client_sdk/src/libraries/nacl_io/devfs/jspipe_node.h |
| index ad7ac995477d6ebedb9d52b8efbfa09af103d025..460dd2491d63756d3ccabb360028cd1feeec5d16 100644 |
| --- a/native_client_sdk/src/libraries/nacl_io/devfs/jspipe_node.h |
| +++ b/native_client_sdk/src/libraries/nacl_io/devfs/jspipe_node.h |
| @@ -5,27 +5,69 @@ |
| #ifndef LIBRARIES_NACL_IO_DEVFS_JSPIPE_NODE_H_ |
| #define LIBRARIES_NACL_IO_DEVFS_JSPIPE_NODE_H_ |
| -#include "nacl_io/pipe/pipe_node.h" |
| - |
| +#include <ppapi/c/pp_var.h> |
| #include <string> |
| +#include "nacl_io/devfs/jspipe_event_emitter.h" |
| +#include "nacl_io/stream/stream_node.h" |
| + |
| namespace nacl_io { |
| -class JSPipeNode : public PipeNode { |
| +class MessagingInterface; |
| +class VarInterface; |
| +class VarArrayInterface; |
| +class VarArrayBufferInterface; |
| +class VarDictionaryInterface; |
| + |
| +/** |
| + * JSPipeNode represents a two-way channel for communicating with JavaScript |
| + * via calls to PostMessage. In order to use these some ammount of logic on |
|
binji
2014/05/01 20:22:31
amount
Sam Clegg
2014/05/01 22:16:55
Done.
|
| + * the JavaScript side is also required. The protocol to the communication |
| + * looks the same in both directions and consists of two message types: |
| + * 'write' and 'ack'. |
| + * The messages are formated as JavaScript dictionary objects and take the |
| + * following form: |
| + * { <pipe_name> : [ <massage_type>, <message_payload> ] } |
| + * The payload for 'write' message is a ArrayBuffer containing binary data. |
| + * The payload for 'ack' messages is the total number of bytes recieved at |
| + * the other end. |
| + * For example: { 'jspipe1' : [ 'ack', 234 ] } |
| + * |
| + * Messages comming from JavaScript must be delivered using the |
|
binji
2014/05/01 20:22:31
coming
Sam Clegg
2014/05/01 22:16:55
Done.
|
| + * NACL_IOC_HANDLEMESSAGE ioctl on the file handle. |
| + */ |
| +class JSPipeNode : public Node { |
| public: |
| - explicit JSPipeNode(Filesystem* filesystem) : PipeNode(filesystem) {} |
| + explicit JSPipeNode(Filesystem* filesystem); |
| + |
| + virtual JSPipeEventEmitter* GetEventEmitter(); |
| virtual Error VIoctl(int request, va_list args); |
| - // Writes go directly to PostMessage, reads come from a pipe |
| - // that gets populated by incoming messages |
| + virtual Error Read(const HandleAttr& attr, |
| + void* buf, |
| + size_t count, |
| + int* out_bytes); |
| virtual Error Write(const HandleAttr& attr, |
| const void* buf, |
| size_t count, |
| int* out_bytes); |
| - private: |
| + protected: |
| + Error HandleJSWrite(PP_Var message); |
| + Error HandleJSAck(PP_Var message); |
| + Error HandleJSMessage(PP_Var message); |
| + Error SendAck(); |
| + |
| + ScopedJSPipeEventEmitter pipe_; |
| + |
| std::string name_; |
| + |
| + MessagingInterface* messaging_iface_; |
| + VarInterface* var_iface_; |
| + VarArrayInterface* array_iface_; |
| + VarArrayBufferInterface* buffer_iface_; |
| + VarDictionaryInterface* dict_iface_; |
| }; |
| } // namespace nacl_io |