package notify import ( "fmt" "testing" "time" ) func TestMsgEnDeCode(t *testing.T) { Register(HelloMessage{}) Register(Error{}) go ServerRun(time.Second * 30) time.Sleep(time.Second * 2) ClientRun(time.Second * 35) } type Error struct { Msg string } func (e Error) Error() string { return e.Msg } type WorldMessage struct { Port int MyCode string MyInfo []int Err error } type HelloMessage struct { ID string MyMap map[string]string MySlice []int World WorldMessage } func ClientRun(stopTime time.Duration) { c := NewClient() err := c.Connect("tcp", "127.0.0.1:23456") if err != nil { panic(err) } c.SetLink("msg", func(msg *Message) { var hi HelloMessage err := msg.Value.Orm(&hi) if err != nil { panic(err) } fmt.Printf("recv info from server,struct detail is %+v\n", hi) }) timer := time.NewTimer(stopTime) for { select { case <-timer.C: c.Stop() return case <-time.After(time.Second * 2): fmt.Println("client msg sent", c.SendObj("msg", HelloMessage{ ID: "client", MyMap: map[string]string{"hello": "world"}, MySlice: []int{int(time.Now().Unix())}, World: WorldMessage{ Port: 520, MyCode: "b612", MyInfo: []int{0, 1, 2, 3}, Err: Error{Msg: "Hello World"}, }, })) } } } func ServerRun(stopTime time.Duration) { s := NewServer() err := s.Listen("tcp", "127.0.0.1:23456") if err != nil { panic(err) } s.SetLink("msg", func(msg *Message) { var hi HelloMessage err := msg.Value.Orm(&hi) if err != nil { panic(err) } fmt.Printf("recv info from client:%v,struct detail is %+v\n", msg.ClientConn.GetRemoteAddr(), hi) hi.ID = "server" hi.World.Port = 666 hi.MySlice = append(hi.MySlice, 1, 1, 2, 7) msg.ReplyObj(hi) }) <-time.After(stopTime) s.Stop() }