|
|
|
@ -4,6 +4,7 @@ import (
|
|
|
|
|
"context" |
|
|
|
|
"git.hpds.cc/Component/network" |
|
|
|
|
"git.hpds.cc/Component/network/frame" |
|
|
|
|
"git.hpds.cc/Component/network/log" |
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
const ( |
|
|
|
@ -17,15 +18,17 @@ type AccessPoint interface {
|
|
|
|
|
// Connect to HPDS-Mq.
|
|
|
|
|
Connect() error |
|
|
|
|
// SetDataTag will set the tag of data when invoking Write().
|
|
|
|
|
SetDataTag(tag uint8) |
|
|
|
|
SetDataTag(tag frame.Tag) |
|
|
|
|
// Write the data to downstream.
|
|
|
|
|
Write(p []byte) (n int, err error) |
|
|
|
|
// WriteWithTag will write data with specified tag, default transactionId is epoch time.
|
|
|
|
|
WriteWithTag(tag uint8, data []byte) error |
|
|
|
|
WriteWithTag(tag frame.Tag, data []byte) error |
|
|
|
|
// SetErrorHandler set the error handler function when server error occurs
|
|
|
|
|
SetErrorHandler(fn func(err error)) |
|
|
|
|
// SetReceiveHandler [Experimental] set to observe handler function
|
|
|
|
|
SetReceiveHandler(fn func(tag byte, data []byte)) |
|
|
|
|
SetReceiveHandler(fn func(tag frame.Tag, data []byte)) |
|
|
|
|
// Broadcast the data to all downstream
|
|
|
|
|
Broadcast(data []byte) error |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// hpds-AccessPoint
|
|
|
|
@ -33,8 +36,8 @@ type accessPoint struct {
|
|
|
|
|
name string |
|
|
|
|
mqEndpoint string |
|
|
|
|
client *network.Client |
|
|
|
|
tag uint8 |
|
|
|
|
fn func(byte, []byte) |
|
|
|
|
tag frame.Tag |
|
|
|
|
fn func(frame.Tag, []byte) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
var _ AccessPoint = &accessPoint{} |
|
|
|
@ -42,7 +45,7 @@ var _ AccessPoint = &accessPoint{}
|
|
|
|
|
// NewAccessPoint create a hpds-AccessPoint
|
|
|
|
|
func NewAccessPoint(name string, opts ...Option) AccessPoint { |
|
|
|
|
options := NewOptions(opts...) |
|
|
|
|
client := network.NewClient(name, network.ClientTypeProtocolGateway, options.ClientOptions...) |
|
|
|
|
client := network.NewClient(name, network.ClientTypeSource, options.ClientOptions...) |
|
|
|
|
|
|
|
|
|
return &accessPoint{ |
|
|
|
|
name: name, |
|
|
|
@ -53,21 +56,25 @@ func NewAccessPoint(name string, opts ...Option) AccessPoint {
|
|
|
|
|
|
|
|
|
|
// Write the data to downstream.
|
|
|
|
|
func (s *accessPoint) Write(data []byte) (int, error) { |
|
|
|
|
return len(data), s.WriteWithTag(s.tag, data) |
|
|
|
|
err := s.WriteWithTag(s.tag, data) |
|
|
|
|
if err != nil { |
|
|
|
|
return 0, err |
|
|
|
|
} |
|
|
|
|
return len(data), nil |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// SetDataTag will set the tag of data when invoking Write().
|
|
|
|
|
func (s *accessPoint) SetDataTag(tag uint8) { |
|
|
|
|
func (s *accessPoint) SetDataTag(tag frame.Tag) { |
|
|
|
|
s.tag = tag |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Close will close the connection to MessageQueue.
|
|
|
|
|
func (s *accessPoint) Close() error { |
|
|
|
|
if err := s.client.Close(); err != nil { |
|
|
|
|
s.client.Logger().Errorf("%sClose(): %v", apLogPrefix, err) |
|
|
|
|
log.Errorf("%sClose(): %v", apLogPrefix, err) |
|
|
|
|
return err |
|
|
|
|
} |
|
|
|
|
s.client.Logger().Debugf("%s is closed", apLogPrefix) |
|
|
|
|
log.Debugf("%s is closed", apLogPrefix) |
|
|
|
|
return nil |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -82,17 +89,17 @@ func (s *accessPoint) Connect() error {
|
|
|
|
|
|
|
|
|
|
err := s.client.Connect(context.Background(), s.mqEndpoint) |
|
|
|
|
if err != nil { |
|
|
|
|
s.client.Logger().Errorf("%sConnect() error: %s", apLogPrefix, err) |
|
|
|
|
log.Errorf("%sConnect() error: %s", apLogPrefix, err) |
|
|
|
|
} |
|
|
|
|
return err |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// WriteWithTag will write data with specified tag, default transactionID is epoch time.
|
|
|
|
|
func (s *accessPoint) WriteWithTag(tag uint8, data []byte) error { |
|
|
|
|
func (s *accessPoint) WriteWithTag(tag frame.Tag, data []byte) error { |
|
|
|
|
f := frame.NewDataFrame() |
|
|
|
|
f.SetCarriage(tag, data) |
|
|
|
|
f.SetSourceId(s.client.ClientId()) |
|
|
|
|
s.client.Logger().Debugf("%sWriteWithTag: tid=%s, source_id=%s, data[%d]=%# x", |
|
|
|
|
log.Debugf("%sWriteWithTag: tid=%s, source_id=%s, data[%d]=%# x", |
|
|
|
|
apLogPrefix, f.TransactionId(), f.SourceId(), len(data), frame.Shortly(data)) |
|
|
|
|
return s.client.WriteFrame(f) |
|
|
|
|
} |
|
|
|
@ -103,7 +110,17 @@ func (s *accessPoint) SetErrorHandler(fn func(err error)) {
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// SetReceiveHandler [Experimental] set to observe handler function
|
|
|
|
|
func (s *accessPoint) SetReceiveHandler(fn func(byte, []byte)) { |
|
|
|
|
func (s *accessPoint) SetReceiveHandler(fn func(frame.Tag, []byte)) { |
|
|
|
|
s.fn = fn |
|
|
|
|
s.client.Logger().Debugf("%sSetReceiveHandler(%v)", apLogPrefix, s.fn) |
|
|
|
|
log.Debugf("%sSetReceiveHandler(%v)", apLogPrefix, s.fn) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Broadcast Write the data to all downstream
|
|
|
|
|
func (s *accessPoint) Broadcast(data []byte) error { |
|
|
|
|
f := frame.NewDataFrame() |
|
|
|
|
f.SetCarriage(s.tag, data) |
|
|
|
|
f.SetSourceId(s.client.ClientId()) |
|
|
|
|
f.SetBroadcast(true) |
|
|
|
|
log.Debugf("Broadcast", "data_frame", f.String()) |
|
|
|
|
return s.client.WriteFrame(f) |
|
|
|
|
} |
|
|
|
|