Moved code to top-level.

This commit is contained in:
Jay
2026-01-26 10:28:39 -05:00
parent 17fb1c6c9a
commit 5ee9ef500e
16 changed files with 95 additions and 90 deletions

View File

@@ -1,4 +1,4 @@
package ws package honeybee
import ( import (
"git.wisehodl.dev/jay/go-honeybee/errors" "git.wisehodl.dev/jay/go-honeybee/errors"

View File

@@ -1,4 +1,4 @@
package ws package honeybee
import ( import (
"git.wisehodl.dev/jay/go-honeybee/errors" "git.wisehodl.dev/jay/go-honeybee/errors"

View File

@@ -1,8 +1,7 @@
package ws package honeybee
import ( import (
"fmt" "fmt"
"net/http"
"net/url" "net/url"
"sync" "sync"
"time" "time"
@@ -11,79 +10,6 @@ import (
"github.com/gorilla/websocket" "github.com/gorilla/websocket"
) )
type Dialer interface {
Dial(urlStr string, requestHeader http.Header) (Socket, *http.Response, error)
}
func NewDialer() Dialer {
return NewGorillaDialer()
}
type GorillaDialer struct {
*websocket.Dialer
}
func NewGorillaDialer() *GorillaDialer {
return &GorillaDialer{
Dialer: &websocket.Dialer{
HandshakeTimeout: 45 * time.Second,
ReadBufferSize: 1024,
WriteBufferSize: 1024,
},
}
}
// Returns the Socket interface
func (d *GorillaDialer) Dial(
urlStr string, requestHeader http.Header,
) (
Socket, *http.Response, error,
) {
conn, resp, err := d.Dialer.Dial(urlStr, requestHeader)
return conn, resp, err
}
type Socket interface {
WriteMessage(messageType int, data []byte) error
ReadMessage() (messageType int, p []byte, err error)
Close() error
SetReadDeadline(t time.Time) error
SetWriteDeadline(t time.Time) error
SetCloseHandler(h func(code int, text string) error)
}
func AcquireSocket(
retryMgr *RetryManager,
dialer Dialer,
urlStr string,
) (Socket, *http.Response, error) {
if retryMgr == nil {
return nil, nil, errors.NewConnectionError("retry manager cannot be nil")
}
if dialer == nil {
return nil, nil, errors.NewConnectionError("dialer cannot be nil")
}
if urlStr == "" {
return nil, nil, errors.NewConnectionError("URL cannot be empty")
}
for {
socket, resp, err := dialer.Dial(urlStr, nil)
if err == nil {
return socket, resp, nil
}
if !retryMgr.ShouldRetry() {
return nil, nil, err
}
delay := retryMgr.CalculateDelay()
time.Sleep(delay)
retryMgr.RecordRetry()
}
}
type ConnectionState int type ConnectionState int
const ( const (

View File

@@ -1,4 +1,4 @@
package ws package honeybee
import ( import (
"fmt" "fmt"

View File

@@ -1,4 +1,4 @@
package ws package honeybee
import ( import (
"fmt" "fmt"

View File

@@ -1,4 +1,4 @@
package ws package honeybee
import ( import (
"fmt" "fmt"

View File

@@ -1,4 +1,4 @@
package ws package honeybee
import ( import (
"fmt" "fmt"

View File

@@ -1 +0,0 @@
package honeybee

View File

@@ -1,4 +1,4 @@
package ws package honeybee
import ( import (
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"

View File

@@ -1,4 +1,4 @@
package ws package honeybee
import ( import (
"math" "math"

View File

@@ -1,4 +1,4 @@
package ws package honeybee
import ( import (
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"

82
socket.go Normal file
View File

@@ -0,0 +1,82 @@
package honeybee
import (
"net/http"
"time"
"git.wisehodl.dev/jay/go-honeybee/errors"
"github.com/gorilla/websocket"
)
type Dialer interface {
Dial(urlStr string, requestHeader http.Header) (Socket, *http.Response, error)
}
func NewDialer() Dialer {
return NewGorillaDialer()
}
type GorillaDialer struct {
*websocket.Dialer
}
func NewGorillaDialer() *GorillaDialer {
return &GorillaDialer{
Dialer: &websocket.Dialer{
HandshakeTimeout: 45 * time.Second,
ReadBufferSize: 1024,
WriteBufferSize: 1024,
},
}
}
// Returns the Socket interface
func (d *GorillaDialer) Dial(
urlStr string, requestHeader http.Header,
) (
Socket, *http.Response, error,
) {
conn, resp, err := d.Dialer.Dial(urlStr, requestHeader)
return conn, resp, err
}
type Socket interface {
WriteMessage(messageType int, data []byte) error
ReadMessage() (messageType int, p []byte, err error)
Close() error
SetReadDeadline(t time.Time) error
SetWriteDeadline(t time.Time) error
SetCloseHandler(h func(code int, text string) error)
}
func AcquireSocket(
retryMgr *RetryManager,
dialer Dialer,
urlStr string,
) (Socket, *http.Response, error) {
if retryMgr == nil {
return nil, nil, errors.NewConnectionError("retry manager cannot be nil")
}
if dialer == nil {
return nil, nil, errors.NewConnectionError("dialer cannot be nil")
}
if urlStr == "" {
return nil, nil, errors.NewConnectionError("URL cannot be empty")
}
for {
socket, resp, err := dialer.Dial(urlStr, nil)
if err == nil {
return socket, resp, nil
}
if !retryMgr.ShouldRetry() {
return nil, nil, err
}
delay := retryMgr.CalculateDelay()
time.Sleep(delay)
retryMgr.RecordRetry()
}
}

View File

@@ -1,4 +1,4 @@
package ws package honeybee
import ( import (
"errors" "errors"

View File

@@ -1,4 +1,4 @@
package ws package honeybee
import ( import (
"net/url" "net/url"

View File

@@ -1,4 +1,4 @@
package ws package honeybee
import ( import (
"git.wisehodl.dev/jay/go-honeybee/errors" "git.wisehodl.dev/jay/go-honeybee/errors"

View File

@@ -1,2 +0,0 @@
// ws package end-to-end tests
package ws