Added whisper messages

* have identity & get messages
This commit is contained in:
obscuren 2015-01-30 13:47:18 +01:00
parent c03d403437
commit af927ffdaf
3 changed files with 59 additions and 5 deletions

@ -12,10 +12,20 @@
<button onclick="test()">Send</button> <button onclick="test()">Send</button>
<table width="100%" id="table"> <table width="100%" id="table">
<tr>
<td>Count</td>
<td id="count"></td>
</tr>
<tr> <tr>
<td>ID</td> <td>ID</td>
<td id="id"></td> <td id="id"></td>
</tr> </tr>
<tr>
<td>Has identity</td>
<td id="known"></td>
</tr>
</table> </table>
</body> </body>
@ -27,13 +37,21 @@
var id = shh.newIdentity(); var id = shh.newIdentity();
document.querySelector("#id").innerHTML = id; document.querySelector("#id").innerHTML = id;
document.querySelector("#known").innerHTML = shh.haveIdentity(id);
shh.watch({topics: ["test"]}).arrived(function(message) { var watch = shh.watch({topics: ["test"]})
watch.arrived(function(message) {
document.querySelector("#table").innerHTML += "<tr><td colspan='2'>"+JSON.stringify(message)+"</td></tr>"; document.querySelector("#table").innerHTML += "<tr><td colspan='2'>"+JSON.stringify(message)+"</td></tr>";
}); });
function test() { function test() {
shh.post({topics: ["test"], payload: web3.fromAscii("test it")}) shh.post({topics: ["test"], payload: web3.fromAscii("test it")});
count();
}
function count() {
document.querySelector("#count").innerHTML = watch.messages().length;
} }
</script> </script>

@ -287,7 +287,7 @@ func (req *RpcRequest) ToWhisperFilterArgs() (*xeth.Options, error) {
return &args, nil return &args, nil
} }
func (req *RpcRequest) ToWhisperChangedArgs() (int, error) { func (req *RpcRequest) ToWhisperIdArgs() (int, error) {
if len(req.Params) < 1 { if len(req.Params) < 1 {
return 0, NewErrorResponse(ErrorArguments) return 0, NewErrorResponse(ErrorArguments)
} }
@ -314,3 +314,17 @@ func (req *RpcRequest) ToWhisperPostArgs() (*WhisperMessageArgs, error) {
rpclogger.DebugDetailf("%T %v", args, args) rpclogger.DebugDetailf("%T %v", args, args)
return &args, nil return &args, nil
} }
func (req *RpcRequest) ToWhisperHasIdentityArgs() (string, error) {
if len(req.Params) < 1 {
return "", NewErrorResponse(ErrorArguments)
}
var args string
err := json.Unmarshal(req.Params[0], &args)
if err != nil {
return "", err
}
rpclogger.DebugDetailf("%T %v", args, args)
return args, nil
}

@ -299,6 +299,16 @@ func (p *EthereumApi) WhisperPost(args *WhisperMessageArgs, reply *interface{})
return nil return nil
} }
func (p *EthereumApi) HasWhisperIdentity(args string, reply *interface{}) error {
*reply = p.xeth.Whisper().HasIdentity(args)
return nil
}
func (p *EthereumApi) WhisperMessages(id int, reply *interface{}) error {
*reply = p.xeth.Whisper().Messages(id)
return nil
}
func (p *EthereumApi) GetRequestReply(req *RpcRequest, reply *interface{}) error { func (p *EthereumApi) GetRequestReply(req *RpcRequest, reply *interface{}) error {
// Spec at https://github.com/ethereum/wiki/wiki/Generic-ON-RPC // Spec at https://github.com/ethereum/wiki/wiki/Generic-ON-RPC
rpclogger.DebugDetailf("%T %s", req.Params, req.Params) rpclogger.DebugDetailf("%T %s", req.Params, req.Params)
@ -405,7 +415,7 @@ func (p *EthereumApi) GetRequestReply(req *RpcRequest, reply *interface{}) error
} }
return p.NewWhisperFilter(args, reply) return p.NewWhisperFilter(args, reply)
case "shh_changed": case "shh_changed":
args, err := req.ToWhisperChangedArgs() args, err := req.ToWhisperIdArgs()
if err != nil { if err != nil {
return err return err
} }
@ -413,9 +423,21 @@ func (p *EthereumApi) GetRequestReply(req *RpcRequest, reply *interface{}) error
case "shh_post": case "shh_post":
args, err := req.ToWhisperPostArgs() args, err := req.ToWhisperPostArgs()
if err != nil { if err != nil {
return nil return err
} }
return p.WhisperPost(args, reply) return p.WhisperPost(args, reply)
case "shh_haveIdentity":
args, err := req.ToWhisperHasIdentityArgs()
if err != nil {
return err
}
return p.HasWhisperIdentity(args, reply)
case "shh_getMessages":
args, err := req.ToWhisperIdArgs()
if err != nil {
return err
}
return p.WhisperMessages(args, reply)
default: default:
return NewErrorResponse(fmt.Sprintf("%v %s", ErrorNotImplemented, req.Method)) return NewErrorResponse(fmt.Sprintf("%v %s", ErrorNotImplemented, req.Method))
} }