TCPCommand.go
package ipc
import (
"crypto/rand"
"encoding/hex"
"errors"
"fmt"
"io"
"time"
)
const (
IDLengthLimit = 256
TypeLengthLimit = 256
)
type TCPCommand struct {
ID string
Type string
Data interface{}
Sender io.ReadWriteCloser
}
func NewTCPCommand(commandType string, data interface{}) (*TCPCommand, error) {
if !isValidType(commandType) {
return nil, errors.New("invalid type")
}
return &TCPCommand{
ID: generateID(),
Type: commandType,
Data: data,
}, nil
}
func generateID() string {
timeHex := hex.EncodeToString([]byte(fmt.Sprintf("%x", time.Now().UnixNano())))
randomBytes := make([]byte, 16)
rand.Read(randomBytes)
randomHex := hex.EncodeToString(randomBytes)
return timeHex + randomHex
}
func isValidID(id string) bool {
return len(id) < IDLengthLimit
}
func isValidType(commandType string) bool {
return len(commandType) < TypeLengthLimit
}
func isValidSender(sender io.ReadWriteCloser) bool {
return sender != nil
}
func (c *TCPCommand) SetID(id string) error {
if !isValidID(id) {
return errors.New("invalid id")
}
c.ID = id
return nil
}
func (c *TCPCommand) SetType(commandType string) error {
if !isValidType(commandType) {
return errors.New("invalid type")
}
c.Type = commandType
return nil
}
func (c *TCPCommand) SetData(data interface{}) {
c.Data = data
}
func (c *TCPCommand) SetSender(sender io.ReadWriteCloser) error {
if !isValidSender(sender) {
return errors.New("invalid sender")
}
c.Sender = sender
return nil
}
func (c *TCPCommand) GetID() string {
return c.ID
}
func (c *TCPCommand) GetType() string {
return c.Type
}
func (c *TCPCommand) GetData() interface{} {
return c.Data
}
func (c *TCPCommand) GetSender() io.ReadWriteCloser {
return c.Sender
}์ฃผ์ ์์
TCPCommand ๊ตฌ์กฐ์ฒด
ํจ์ ๋ฐ ๋ฉ์๋
์์ฝ
Last updated