فهرست منبع

Added whisper messages

* have identity & get messages
obscuren 10 سال پیش
والد
کامیت
af927ffdaf
3فایلهای تغییر یافته به همراه59 افزوده شده و 5 حذف شده
  1. 20 2
      cmd/mist/assets/examples/whisper.html
  2. 15 1
      rpc/message.go
  3. 24 2
      rpc/packages.go

+ 20 - 2
cmd/mist/assets/examples/whisper.html

@@ -12,10 +12,20 @@
 <button onclick="test()">Send</button>
 
 <table width="100%" id="table">
+	<tr>
+		<td>Count</td>
+		<td id="count"></td>
+	</tr>
+
 	<tr>
 		<td>ID</td>
 		<td id="id"></td>
 	</tr>
+
+	<tr>
+		<td>Has identity</td>
+		<td id="known"></td>
+	</tr>
 </table>
 </body>
 
@@ -27,13 +37,21 @@
 
 	var id = shh.newIdentity();
 	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>";
 	});
 
 	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>
 

+ 15 - 1
rpc/message.go

@@ -287,7 +287,7 @@ func (req *RpcRequest) ToWhisperFilterArgs() (*xeth.Options, error) {
 	return &args, nil
 }
 
-func (req *RpcRequest) ToWhisperChangedArgs() (int, error) {
+func (req *RpcRequest) ToWhisperIdArgs() (int, error) {
 	if len(req.Params) < 1 {
 		return 0, NewErrorResponse(ErrorArguments)
 	}
@@ -314,3 +314,17 @@ func (req *RpcRequest) ToWhisperPostArgs() (*WhisperMessageArgs, error) {
 	rpclogger.DebugDetailf("%T %v", args, args)
 	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
+}

+ 24 - 2
rpc/packages.go

@@ -299,6 +299,16 @@ func (p *EthereumApi) WhisperPost(args *WhisperMessageArgs, reply *interface{})
 	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 {
 	// Spec at https://github.com/ethereum/wiki/wiki/Generic-ON-RPC
 	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)
 	case "shh_changed":
-		args, err := req.ToWhisperChangedArgs()
+		args, err := req.ToWhisperIdArgs()
 		if err != nil {
 			return err
 		}
@@ -413,9 +423,21 @@ func (p *EthereumApi) GetRequestReply(req *RpcRequest, reply *interface{}) error
 	case "shh_post":
 		args, err := req.ToWhisperPostArgs()
 		if err != nil {
-			return nil
+			return err
 		}
 		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:
 		return NewErrorResponse(fmt.Sprintf("%v %s", ErrorNotImplemented, req.Method))
 	}