mirror of https://github.com/tidwall/redcon.git
Compare commits
5 Commits
6952cec09f
...
2f2825976d
Author | SHA1 | Date |
---|---|---|
Fusl | 2f2825976d | |
Josh Baker | 9f71787fcd | |
Josh Baker | d05da895e5 | |
Tom Arrell | c746dbc05b | |
tidwall | 8b671291b8 |
|
@ -18,6 +18,8 @@ Features
|
||||||
- Compatible pub/sub support
|
- Compatible pub/sub support
|
||||||
- Multithreaded
|
- Multithreaded
|
||||||
|
|
||||||
|
*This library is also avaliable for [Rust](https://github.com/tidwall/redcon.rs) and [C](https://github.com/tidwall/redcon.c).*
|
||||||
|
|
||||||
Installing
|
Installing
|
||||||
----------
|
----------
|
||||||
|
|
||||||
|
|
39
redcon.go
39
redcon.go
|
@ -236,12 +236,14 @@ func Serve(ln net.Listener,
|
||||||
closed func(conn Conn, err error),
|
closed func(conn Conn, err error),
|
||||||
) error {
|
) error {
|
||||||
s := newServer()
|
s := newServer()
|
||||||
|
s.mu.Lock()
|
||||||
s.net = ln.Addr().Network()
|
s.net = ln.Addr().Network()
|
||||||
s.laddr = ln.Addr().String()
|
s.laddr = ln.Addr().String()
|
||||||
s.ln = ln
|
s.ln = ln
|
||||||
s.handler = handler
|
s.handler = handler
|
||||||
s.accept = accept
|
s.accept = accept
|
||||||
s.closed = closed
|
s.closed = closed
|
||||||
|
s.mu.Unlock()
|
||||||
return serve(s)
|
return serve(s)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -297,7 +299,9 @@ func (s *Server) ListenServeAndSignal(signal chan error) error {
|
||||||
}
|
}
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
s.mu.Lock()
|
||||||
s.ln = ln
|
s.ln = ln
|
||||||
|
s.mu.Unlock()
|
||||||
if signal != nil {
|
if signal != nil {
|
||||||
signal <- nil
|
signal <- nil
|
||||||
}
|
}
|
||||||
|
@ -306,9 +310,11 @@ func (s *Server) ListenServeAndSignal(signal chan error) error {
|
||||||
|
|
||||||
// Serve serves incoming connections with the given net.Listener.
|
// Serve serves incoming connections with the given net.Listener.
|
||||||
func (s *Server) Serve(ln net.Listener) error {
|
func (s *Server) Serve(ln net.Listener) error {
|
||||||
|
s.mu.Lock()
|
||||||
s.ln = ln
|
s.ln = ln
|
||||||
s.net = ln.Addr().Network()
|
s.net = ln.Addr().Network()
|
||||||
s.laddr = ln.Addr().String()
|
s.laddr = ln.Addr().String()
|
||||||
|
s.mu.Unlock()
|
||||||
return serve(s)
|
return serve(s)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -322,7 +328,9 @@ func (s *TLSServer) ListenServeAndSignal(signal chan error) error {
|
||||||
}
|
}
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
s.mu.Lock()
|
||||||
s.ln = ln
|
s.ln = ln
|
||||||
|
s.mu.Unlock()
|
||||||
if signal != nil {
|
if signal != nil {
|
||||||
signal <- nil
|
signal <- nil
|
||||||
}
|
}
|
||||||
|
@ -336,7 +344,7 @@ func serve(s *Server) error {
|
||||||
s.mu.Lock()
|
s.mu.Lock()
|
||||||
defer s.mu.Unlock()
|
defer s.mu.Unlock()
|
||||||
for c := range s.conns {
|
for c := range s.conns {
|
||||||
c.Close()
|
c.conn.Close()
|
||||||
}
|
}
|
||||||
s.conns = nil
|
s.conns = nil
|
||||||
}()
|
}()
|
||||||
|
@ -603,9 +611,9 @@ func (w *Writer) WriteNull() {
|
||||||
// sub-responses to the client to complete the response.
|
// sub-responses to the client to complete the response.
|
||||||
// For example to write two strings:
|
// For example to write two strings:
|
||||||
//
|
//
|
||||||
// c.WriteArray(2)
|
// c.WriteArray(2)
|
||||||
// c.WriteBulkString("item 1")
|
// c.WriteBulkString("item 1")
|
||||||
// c.WriteBulkString("item 2")
|
// c.WriteBulkString("item 2")
|
||||||
func (w *Writer) WriteArray(count int) {
|
func (w *Writer) WriteArray(count int) {
|
||||||
if w.err != nil {
|
if w.err != nil {
|
||||||
return
|
return
|
||||||
|
@ -710,17 +718,18 @@ func (w *Writer) WriteRaw(data []byte) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// WriteAny writes any type to client.
|
// WriteAny writes any type to client.
|
||||||
// nil -> null
|
//
|
||||||
// error -> error (adds "ERR " when first word is not uppercase)
|
// nil -> null
|
||||||
// string -> bulk-string
|
// error -> error (adds "ERR " when first word is not uppercase)
|
||||||
// numbers -> bulk-string
|
// string -> bulk-string
|
||||||
// []byte -> bulk-string
|
// numbers -> bulk-string
|
||||||
// bool -> bulk-string ("0" or "1")
|
// []byte -> bulk-string
|
||||||
// slice -> array
|
// bool -> bulk-string ("0" or "1")
|
||||||
// map -> array with key/value pairs
|
// slice -> array
|
||||||
// SimpleString -> string
|
// map -> array with key/value pairs
|
||||||
// SimpleInt -> integer
|
// SimpleString -> string
|
||||||
// everything-else -> bulk-string representation using fmt.Sprint()
|
// SimpleInt -> integer
|
||||||
|
// everything-else -> bulk-string representation using fmt.Sprint()
|
||||||
func (w *Writer) WriteAny(v interface{}) {
|
func (w *Writer) WriteAny(v interface{}) {
|
||||||
if w.err != nil {
|
if w.err != nil {
|
||||||
return
|
return
|
||||||
|
|
Loading…
Reference in New Issue