mirror of
https://github.com/jwetzell/osc-go.git
synced 2026-08-11 01:53:38 +00:00
split message functions out to separate file
This commit is contained in:
@@ -0,0 +1,58 @@
|
||||
package osc
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"strings"
|
||||
)
|
||||
|
||||
func MessageToBytes(message OSCMessage) []byte {
|
||||
//TODO(jwetzell): add error handling
|
||||
oscBuffer := []byte{}
|
||||
|
||||
oscBuffer = append(oscBuffer, stringToOSCBytes(message.Address)...)
|
||||
|
||||
var sb strings.Builder
|
||||
|
||||
sb.WriteString(",")
|
||||
|
||||
for _, arg := range message.Args {
|
||||
sb.WriteString(arg.Type)
|
||||
}
|
||||
|
||||
oscBuffer = append(oscBuffer, stringToOSCBytes(sb.String())...)
|
||||
oscBuffer = append(oscBuffer, argsToBuffer(message.Args)...)
|
||||
|
||||
return oscBuffer
|
||||
}
|
||||
|
||||
func MessageFromBytes(bytes []byte) (OSCMessage, error) {
|
||||
address, typeAndArgBytes := readOSCString(bytes)
|
||||
|
||||
if address[0] != 47 {
|
||||
return OSCMessage{}, errors.New("OSC Message address must start with /")
|
||||
}
|
||||
|
||||
oscMessage := OSCMessage{
|
||||
Address: address,
|
||||
Args: []OSCArg{},
|
||||
}
|
||||
|
||||
typeString, argBytes := readOSCString(typeAndArgBytes)
|
||||
|
||||
for index, oscType := range typeString {
|
||||
if index == 0 {
|
||||
if oscType != ',' {
|
||||
return OSCMessage{}, errors.New("type string is malformed")
|
||||
}
|
||||
} else {
|
||||
oscArg, remainingBytes, error := readOSCArg(argBytes, string(oscType))
|
||||
if error != nil {
|
||||
return oscMessage, error
|
||||
}
|
||||
argBytes = remainingBytes
|
||||
oscMessage.Args = append(oscMessage.Args, oscArg)
|
||||
}
|
||||
}
|
||||
|
||||
return oscMessage, nil
|
||||
}
|
||||
@@ -9,7 +9,7 @@ import (
|
||||
|
||||
// TestHelloName calls greetings.Hello with a name, checking
|
||||
// for a valid return value.
|
||||
func TestOSCEncoding(t *testing.T) {
|
||||
func TestOSCMessageEncoding(t *testing.T) {
|
||||
|
||||
testCases := []struct {
|
||||
description string
|
||||
@@ -131,7 +131,7 @@ func TestOSCEncoding(t *testing.T) {
|
||||
|
||||
for _, testCase := range testCases {
|
||||
|
||||
actual := ToBytes(testCase.message)
|
||||
actual := MessageToBytes(testCase.message)
|
||||
|
||||
if !reflect.DeepEqual(actual, testCase.expected) {
|
||||
t.Errorf("Test '%s' failed to encode properly", testCase.description)
|
||||
@@ -142,7 +142,7 @@ func TestOSCEncoding(t *testing.T) {
|
||||
|
||||
}
|
||||
|
||||
func TestOSCDecoding(t *testing.T) {
|
||||
func TestOSCMessageDecoding(t *testing.T) {
|
||||
testCases := []struct {
|
||||
description string
|
||||
bytes []byte
|
||||
@@ -265,7 +265,7 @@ func TestOSCDecoding(t *testing.T) {
|
||||
|
||||
for _, testCase := range testCases {
|
||||
|
||||
actual, error := FromBytes(testCase.bytes)
|
||||
actual, error := MessageFromBytes(testCase.bytes)
|
||||
|
||||
if error != nil {
|
||||
fmt.Println(error)
|
||||
@@ -164,26 +164,6 @@ func argsToBuffer(args []OSCArg) []byte {
|
||||
return argBuffers
|
||||
}
|
||||
|
||||
func ToBytes(message OSCMessage) []byte {
|
||||
//TODO(jwetzell): add error handling
|
||||
oscBuffer := []byte{}
|
||||
|
||||
oscBuffer = append(oscBuffer, stringToOSCBytes(message.Address)...)
|
||||
|
||||
var sb strings.Builder
|
||||
|
||||
sb.WriteString(",")
|
||||
|
||||
for _, arg := range message.Args {
|
||||
sb.WriteString(arg.Type)
|
||||
}
|
||||
|
||||
oscBuffer = append(oscBuffer, stringToOSCBytes(sb.String())...)
|
||||
oscBuffer = append(oscBuffer, argsToBuffer(message.Args)...)
|
||||
|
||||
return oscBuffer
|
||||
}
|
||||
|
||||
func readOSCString(bytes []byte) (string, []byte) {
|
||||
//TODO(jwetzell): add error handling
|
||||
oscString := ""
|
||||
@@ -350,32 +330,3 @@ func readOSCArg(bytes []byte, oscType string) (OSCArg, []byte, error) {
|
||||
}
|
||||
return oscArg, remainingBytes, readArgError
|
||||
}
|
||||
|
||||
func FromBytes(bytes []byte) (OSCMessage, error) {
|
||||
//TODO(jwetzell): add Message and Bundle support
|
||||
address, typeAndArgBytes := readOSCString(bytes)
|
||||
|
||||
oscMessage := OSCMessage{
|
||||
Address: address,
|
||||
Args: []OSCArg{},
|
||||
}
|
||||
|
||||
typeString, argBytes := readOSCString(typeAndArgBytes)
|
||||
|
||||
for index, oscType := range typeString {
|
||||
if index == 0 {
|
||||
if oscType != ',' {
|
||||
return OSCMessage{}, errors.New("type string is malformed")
|
||||
}
|
||||
} else {
|
||||
oscArg, remainingBytes, error := readOSCArg(argBytes, string(oscType))
|
||||
if error != nil {
|
||||
return oscMessage, error
|
||||
}
|
||||
argBytes = remainingBytes
|
||||
oscMessage.Args = append(oscMessage.Args, oscArg)
|
||||
}
|
||||
}
|
||||
|
||||
return oscMessage, nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user