mirror of
https://github.com/nabbar/golib.git
synced 2025-11-03 09:50:52 +08:00
Package Config/component/LDAP:
- replace mutex by atomic - fix minor bugs & optimize code Package Size: - add function 'mul' allowing do a multiplaction on the size value by a float64 given value (could use another size.float64) - add function 'div' allowing do a division of the size value by a float64 given value (could use another size.float64) - add function 'add' allowing do an addtion of the size value with a uint64 given value (could use another size.uint64) - add function 'sub' allowing do an substraction of the size value with a uint64 given value (could use another size.uint64) Package Encoding: - rework completly crypt package to new package encoding - part aes of old crypt become new subpackage encoding/aes - part hex of old crypt (associated with aes) become new standalone subpackage encoding/hexa - adding new subpackage mux to use multiplexer/de-multiplexer of io stream - mux is different of multireader / multiwriter in way as io send from mux in one channel will be received only in the coresponding channel of de-mux - mux is encoding subpackage becauxse based on hex + cbor marshalling / unmarshalling - all subpackage can be used directly of by io reader / writer Package Socket/server - rework server to use as possible direct io to con - rework server to optimize & fix managment (context / shutdown...) - rework server to stop connection befor stopping server - rework server to not load incoming and send it to handler by allowing handler to manager io input/output directly - server not more used buff internally (less memory consuption) - adding counter of opened connection - adding some testing who's checking server & client for each protocol Package Socket/client - rework client to allow connect to server before reading/writing on io stream - rework client to allow consum direct io stream instead of reading locally / call function - rework client to allow having less memory consumption by removing internal buffer - rework client allowing to use root io function (bufio, io copy, ...) Package Socket/multi - adding new subpackage multi to simplfy using of 1 reader / x writer - if no writer is define, using an extended io discard - allowing asynch instancing, populate writer and calling main writer - allowing calling writer / reader to expose the main io reader / writer Package Socket/delim: - adding new subpackage delim to simplify using of bufio reader with delimiter - using 1 writer / 1 reader - allowing root io function like readwritecloser, writeto, ... - use local buffer to prevent race if reader and writer are not is same process Package PProf: - fix missing \n in message Package HttpServer: - fix bug with init TLS & http2 Other: - bump dependencies
This commit is contained in:
@@ -36,18 +36,22 @@ import (
|
||||
"net"
|
||||
"sync/atomic"
|
||||
|
||||
libtls "github.com/nabbar/golib/certificates"
|
||||
libptc "github.com/nabbar/golib/network/protocol"
|
||||
libsck "github.com/nabbar/golib/socket"
|
||||
)
|
||||
|
||||
type cli struct {
|
||||
a *atomic.Value // address : unixfile
|
||||
s *atomic.Int32 // buffer size
|
||||
e *atomic.Value // function error
|
||||
i *atomic.Value // function info
|
||||
c *atomic.Value // net.Conn
|
||||
}
|
||||
|
||||
func (o *cli) SetTLS(enable bool, config libtls.TLSConfig) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (o *cli) RegisterFuncError(f libsck.FuncError) {
|
||||
if o == nil {
|
||||
return
|
||||
@@ -86,15 +90,6 @@ func (o *cli) fctInfo(local, remote net.Addr, state libsck.ConnState) {
|
||||
}
|
||||
}
|
||||
|
||||
func (o *cli) buffSize() int {
|
||||
v := o.s.Load()
|
||||
if v > 0 {
|
||||
return int(v)
|
||||
}
|
||||
|
||||
return libsck.DefaultBufferSize
|
||||
}
|
||||
|
||||
func (o *cli) dial(ctx context.Context) (net.Conn, error) {
|
||||
if o == nil {
|
||||
return nil, ErrInstance
|
||||
@@ -112,6 +107,20 @@ func (o *cli) dial(ctx context.Context) (net.Conn, error) {
|
||||
}
|
||||
}
|
||||
|
||||
func (o *cli) IsConnected() bool {
|
||||
if o == nil {
|
||||
return false
|
||||
} else if i := o.c.Load(); i == nil {
|
||||
return false
|
||||
} else if c, k := i.(net.Conn); !k {
|
||||
return false
|
||||
} else if _, e := c.Write(nil); e != nil {
|
||||
return false
|
||||
} else {
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
||||
func (o *cli) Connect(ctx context.Context) error {
|
||||
if o == nil {
|
||||
return ErrInstance
|
||||
@@ -184,7 +193,10 @@ func (o *cli) Once(ctx context.Context, request io.Reader, fct libsck.Response)
|
||||
o.fctError(o.Close())
|
||||
}()
|
||||
|
||||
var err error
|
||||
var (
|
||||
err error
|
||||
nbr int64
|
||||
)
|
||||
|
||||
if err = o.Connect(ctx); err != nil {
|
||||
o.fctError(err)
|
||||
@@ -192,7 +204,7 @@ func (o *cli) Once(ctx context.Context, request io.Reader, fct libsck.Response)
|
||||
}
|
||||
|
||||
for {
|
||||
_, err = io.Copy(o, request)
|
||||
nbr, err = io.Copy(o, request)
|
||||
|
||||
if err != nil {
|
||||
if !errors.Is(err, io.EOF) {
|
||||
@@ -201,9 +213,14 @@ func (o *cli) Once(ctx context.Context, request io.Reader, fct libsck.Response)
|
||||
} else {
|
||||
break
|
||||
}
|
||||
} else if nbr < 1 {
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
fct(o)
|
||||
if fct != nil {
|
||||
fct(o)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user