aboutsummaryrefslogtreecommitdiffstats
path: root/rpc/comms/inproc.go
diff options
context:
space:
mode:
authorJeffrey Wilcke <geffobscura@gmail.com>2015-06-24 01:19:33 +0800
committerJeffrey Wilcke <geffobscura@gmail.com>2015-06-24 01:19:33 +0800
commit72e2613a9fe3205fa5a67b72b832e03b2357ee88 (patch)
treebbc987510d279d9e174ff8f684158d668131661e /rpc/comms/inproc.go
parent5daf8729be88eca87b302ebf7a46fc69cad0f6d0 (diff)
parent67e6f74e9af00ff011a6a02f18644804eb18cdaa (diff)
downloadgo-tangerine-0.9.32.tar
go-tangerine-0.9.32.tar.gz
go-tangerine-0.9.32.tar.bz2
go-tangerine-0.9.32.tar.lz
go-tangerine-0.9.32.tar.xz
go-tangerine-0.9.32.tar.zst
go-tangerine-0.9.32.zip
Merge branch 'release/0.9.32'v0.9.32
Diffstat (limited to 'rpc/comms/inproc.go')
-rw-r--r--rpc/comms/inproc.go66
1 files changed, 66 insertions, 0 deletions
diff --git a/rpc/comms/inproc.go b/rpc/comms/inproc.go
new file mode 100644
index 000000000..5c84b8fd8
--- /dev/null
+++ b/rpc/comms/inproc.go
@@ -0,0 +1,66 @@
+package comms
+
+import (
+ "fmt"
+
+ "github.com/ethereum/go-ethereum/rpc/codec"
+ "github.com/ethereum/go-ethereum/rpc/shared"
+)
+
+type InProcClient struct {
+ api shared.EthereumApi
+ codec codec.Codec
+ lastId interface{}
+ lastJsonrpc string
+ lastErr error
+ lastRes interface{}
+}
+
+// Create a new in process client
+func NewInProcClient(codec codec.Codec) *InProcClient {
+ return &InProcClient{
+ codec: codec,
+ }
+}
+
+func (self *InProcClient) Close() {
+ // do nothing
+}
+
+// Need to setup api support
+func (self *InProcClient) Initialize(offeredApi shared.EthereumApi) {
+ self.api = offeredApi
+}
+
+func (self *InProcClient) Send(req interface{}) error {
+ if r, ok := req.(*shared.Request); ok {
+ self.lastId = r.Id
+ self.lastJsonrpc = r.Jsonrpc
+ self.lastRes, self.lastErr = self.api.Execute(r)
+ return self.lastErr
+ }
+
+ return fmt.Errorf("Invalid request (%T)", req)
+}
+
+func (self *InProcClient) Recv() (interface{}, error) {
+ return self.lastRes, self.lastErr
+}
+
+func (self *InProcClient) SupportedModules() (map[string]string, error) {
+ req := shared.Request{
+ Id: 1,
+ Jsonrpc: "2.0",
+ Method: "modules",
+ }
+
+ if res, err := self.api.Execute(&req); err == nil {
+ if result, ok := res.(map[string]string); ok {
+ return result, nil
+ }
+ } else {
+ return nil, err
+ }
+
+ return nil, fmt.Errorf("Invalid response")
+}