interface rewriting inspired by gorpc
This commit is contained in:
parent
da05b60694
commit
b097952eb1
10
client.go
10
client.go
|
@ -90,3 +90,13 @@ func NewClient(conn net.Conn) *Client {
|
||||||
|
|
||||||
return ret
|
return ret
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type DialFunc func(addr string) (conn io.ReadWriteCloser, err error)
|
||||||
|
|
||||||
|
func unixDial(addr string) (conn io.ReadWriteCloser, err error) {
|
||||||
|
if conn, err = net.Dial("unix", addr); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return conn, nil
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,13 @@
|
||||||
|
package srpc
|
||||||
|
|
||||||
|
import (
|
||||||
|
"log"
|
||||||
|
)
|
||||||
|
|
||||||
|
type LogErrorFunc func(format string, args ...interface{})
|
||||||
|
|
||||||
|
var logError = LogErrorFunc(log.Printf)
|
||||||
|
|
||||||
|
func SetLogError(f LogErrorFunc) {
|
||||||
|
logError = f
|
||||||
|
}
|
|
@ -74,15 +74,20 @@ func (tc *NetConn) Send(payload interface{}) (err error) {
|
||||||
var header RPCHeader
|
var header RPCHeader
|
||||||
var hb, b bytes.Buffer
|
var hb, b bytes.Buffer
|
||||||
|
|
||||||
if _, ok := payload.(*RPCHeartbeat); ok {
|
switch payload.(type) {
|
||||||
|
case *RPCHeartbeat:
|
||||||
header.RPCType = RPC_HEARTBEAT
|
header.RPCType = RPC_HEARTBEAT
|
||||||
} else if _, ok := payload.(*RPCClose); ok {
|
break
|
||||||
|
case *RPCClose:
|
||||||
header.RPCType = RPC_CLOSE
|
header.RPCType = RPC_CLOSE
|
||||||
} else if _, ok := payload.(*RPCRequest); ok {
|
break
|
||||||
|
case *RPCRequest:
|
||||||
header.RPCType = RPC_REQUEST
|
header.RPCType = RPC_REQUEST
|
||||||
} else if _, ok := payload.(*RPCResponse); ok {
|
break
|
||||||
|
case *RPCResponse:
|
||||||
header.RPCType = RPC_RESPONSE
|
header.RPCType = RPC_RESPONSE
|
||||||
} else {
|
break
|
||||||
|
default:
|
||||||
return errors.New("srpc - Invalid RPC message type")
|
return errors.New("srpc - Invalid RPC message type")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
38
server.go
38
server.go
|
@ -4,6 +4,7 @@ import (
|
||||||
"bytes"
|
"bytes"
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"io"
|
||||||
"net"
|
"net"
|
||||||
"olznet.de/slog"
|
"olznet.de/slog"
|
||||||
"reflect"
|
"reflect"
|
||||||
|
@ -235,3 +236,40 @@ func NewDefaultServer() *Server {
|
||||||
}
|
}
|
||||||
|
|
||||||
var DefaultServer = NewDefaultServer()
|
var DefaultServer = NewDefaultServer()
|
||||||
|
|
||||||
|
type IListener interface {
|
||||||
|
Init(addr string) error
|
||||||
|
Accept() (conn io.ReadWriteCloser, clientAddr string, err error)
|
||||||
|
Close() error
|
||||||
|
Addr() net.Addr
|
||||||
|
}
|
||||||
|
|
||||||
|
type netListener struct {
|
||||||
|
F func(addr string) (net.Listener, error)
|
||||||
|
L net.Listener
|
||||||
|
}
|
||||||
|
|
||||||
|
func (nl *netListener) Init(addr string) (err error) {
|
||||||
|
nl.L, err = nl.F(addr)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
func (nl *netListener) Accept() (conn io.ReadWriteCloser, clientAddr string, err error) {
|
||||||
|
var c net.Conn
|
||||||
|
|
||||||
|
if c, err = nl.L.Accept(); err != nil {
|
||||||
|
return nil, "", err
|
||||||
|
}
|
||||||
|
return c, c.RemoteAddr().String(), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (nl *netListener) Close() error {
|
||||||
|
return nl.L.Close()
|
||||||
|
}
|
||||||
|
|
||||||
|
func (nl *netListener) Addr() net.Addr {
|
||||||
|
if nl.L == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return nl.L.Addr()
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue