2023-09-08 11:35:57 +09:00
// package main ...
package wshandler
import (
2023-12-18 22:21:40 +09:00
"bytes"
"encoding/json"
"errors"
2023-09-08 11:35:57 +09:00
"fmt"
2023-12-18 22:21:40 +09:00
"reflect"
2023-09-08 11:35:57 +09:00
"testing"
2023-12-18 22:21:40 +09:00
"repositories.action2quare.com/ayo/gocommon/session"
2023-09-08 11:35:57 +09:00
)
type TestReceiver struct {
}
func ( tr * TestReceiver ) Func1 ( [ ] any ) {
}
func ( tr * TestReceiver ) Func2 ( args [ ] any ) {
fmt . Println ( args ... )
}
2023-12-18 22:21:40 +09:00
func TestUnmarshalToken ( t * testing . T ) {
// 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7
// 012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890
insrc := [ ] byte ( ` ["string value 1",200,["inner string value 1","inner string value 2"], { "inner map key 1":"inner map string value 1","inner map key 2":"inner map string value 2"},500.1] ` )
dec := json . NewDecoder ( bytes . NewBuffer ( insrc ) )
dec . Token ( )
for {
token_start := dec . InputOffset ( )
tok , _ := dec . Token ( )
token_end := dec . InputOffset ( )
var string_val_1 string
stringtype := reflect . TypeOf ( string_val_1 )
stringvalue := reflect . New ( stringtype )
castptr := stringvalue . Interface ( )
err := json . Unmarshal ( insrc [ token_start : token_end ] , castptr )
fmt . Println ( err )
if tok == nil {
break
}
fmt . Println ( tok , dec . InputOffset ( ) )
}
2023-09-08 11:35:57 +09:00
// src := []any{"a", 1, false}
// payload, _ := json.Marshal(src)
// tr := new(TestReceiver)
// receiver := MakeWebsocketApiHandler(tr, "test")
// var con WebsocketApiBroker
// con.AddHandler(receiver)
}
2023-12-18 22:21:40 +09:00
2023-12-20 10:02:49 +09:00
type testpeer struct {
2023-12-18 22:21:40 +09:00
id string
}
2023-12-20 10:02:49 +09:00
func ( ph * testpeer ) ApiFunc1 ( arg1 string , arg2 int ) error {
2023-12-18 22:21:40 +09:00
fmt . Println ( "ApiFunc1" , ph . id , arg1 , arg2 )
return errors . New ( "fake" )
}
2023-12-20 10:02:49 +09:00
func ( ph * testpeer ) ApiFunc2 ( arg1 string , arg2 map [ string ] int ) ( string , error ) {
2023-12-18 22:21:40 +09:00
fmt . Println ( "ApiFunc2" , ph . id , arg1 , arg2 )
return "success" , nil
}
2023-12-20 10:02:49 +09:00
func ( ph * testpeer ) ApiFunc3 ( arg1 float64 , arg2 [ ] int ) {
2023-12-18 22:21:40 +09:00
fmt . Println ( "ApiFunc3" , ph . id , arg1 , arg2 )
}
2023-12-20 10:02:49 +09:00
func ( ph * testpeer ) ClientDisconnected ( reason string ) {
}
2023-12-18 22:21:40 +09:00
type dummySessionConsumer struct {
}
func ( dsc * dummySessionConsumer ) Query ( string ) ( session . Authorization , error ) {
return session . Authorization { } , nil
}
func ( dsc * dummySessionConsumer ) Touch ( string ) ( session . Authorization , error ) {
return session . Authorization { } , nil
}
func TestPeerApiBroker ( t * testing . T ) {
2023-12-20 10:02:49 +09:00
handler := MakeWebsocketPeerApiHandler [ * testpeer ] ( "test" )
ws := NewWebsocketPeerHandler [ * testpeer ] ( & dummySessionConsumer { } )
2023-12-18 22:21:40 +09:00
ws . AddHandler ( handler )
2023-12-20 10:02:49 +09:00
tp := & testpeer {
2023-12-18 22:21:40 +09:00
id : "onlyone" ,
}
func1args , _ := json . Marshal ( [ ] any { string ( "arg1" ) , int ( 100 ) } )
2023-12-20 10:02:49 +09:00
ws . Call ( tp , "test.ApiFunc1" , bytes . NewBuffer ( func1args ) )
2023-12-18 22:21:40 +09:00
func1args , _ = json . Marshal ( [ ] any { string ( "arg1" ) , map [ string ] int { "arg2.key" : 99 } } )
2023-12-20 10:02:49 +09:00
ws . Call ( tp , "test.ApiFunc2" , bytes . NewBuffer ( func1args ) )
2023-12-18 22:21:40 +09:00
func1args , _ = json . Marshal ( [ ] any { float64 ( 111.1 ) , [ ] int { 99 , 98 } } )
2023-12-20 10:02:49 +09:00
ws . Call ( tp , "test.ApiFunc3" , bytes . NewBuffer ( func1args ) )
2023-12-18 22:21:40 +09:00
}