split socket.go and dialer.go

This commit is contained in:
syumai 2024-01-03 18:40:45 +09:00
parent cd71071154
commit 744d9cc0f1
2 changed files with 52 additions and 43 deletions

View File

@ -0,0 +1,52 @@
package socket
import (
"context"
"net"
"syscall/js"
"github.com/syumai/workers/cloudflare/internal/cfruntimecontext"
"github.com/syumai/workers/internal/jsutil"
)
type Dialer struct {
connect js.Value
opts *SocketOptions
ctx context.Context
}
type SocketOptions struct {
SecureTransport string `json:"secureTransport"`
AllowHalfOpen bool `json:"allowHalfOpen"`
}
// NewDialer
func NewDialer(ctx context.Context, options *SocketOptions) (*Dialer, error) {
connect, err := cfruntimecontext.GetRuntimeContextValue(ctx, "connect")
if err != nil {
return nil, err
}
return &Dialer{connect: connect, opts: options, ctx: ctx}, nil
}
func (d *Dialer) Dial(ctx context.Context, network, addr string) (net.Conn, error) {
switch network {
case "tcp":
default:
panic("not implemented")
}
optionsObj := jsutil.NewObject()
if d.opts != nil {
if d.opts.AllowHalfOpen {
optionsObj.Set("allowHalfOpen", true)
}
if d.opts.SecureTransport != "" {
optionsObj.Set("secureTransport", d.opts.SecureTransport)
}
}
sock := &TCPSocket{}
sock.socket = d.connect.Invoke(addr, optionsObj)
sock.options = d.opts
sock.init(d.ctx)
return sock, nil
}

View File

@ -8,52 +8,9 @@ import (
"syscall/js"
"time"
"github.com/syumai/workers/cloudflare/internal/cfruntimecontext"
"github.com/syumai/workers/internal/jsutil"
)
type Dialer struct {
connect js.Value
opts *SocketOptions
ctx context.Context
}
type SocketOptions struct {
SecureTransport string `json:"secureTransport"`
AllowHalfOpen bool `json:"allowHalfOpen"`
}
// NewDialer
func NewDialer(ctx context.Context, options *SocketOptions) (*Dialer, error) {
connect, err := cfruntimecontext.GetRuntimeContextValue(ctx, "connect")
if err != nil {
return nil, err
}
return &Dialer{connect: connect, opts: options, ctx: ctx}, nil
}
func (d *Dialer) Dial(ctx context.Context, network, addr string) (net.Conn, error) {
switch network {
case "tcp":
default:
panic("not implemented")
}
optionsObj := jsutil.NewObject()
if d.opts != nil {
if d.opts.AllowHalfOpen {
optionsObj.Set("allowHalfOpen", true)
}
if d.opts.SecureTransport != "" {
optionsObj.Set("secureTransport", d.opts.SecureTransport)
}
}
sock := &TCPSocket{}
sock.socket = d.connect.Invoke(addr, optionsObj)
sock.options = d.opts
sock.init(d.ctx)
return sock, nil
}
func (sock *TCPSocket) init(ctx context.Context) {
sock.SetDeadline(time.Now().Add(999999 * time.Hour))
sock.writer = sock.socket.Get("writable").Call("getWriter")