package main import ( "errors" "fmt" "log" "minlib/packet" "unsafe" ) // // @Description: 专门负责从客户端接收MIN包的协程 // @receiver v // func (v *DemoServer) recvPacketFromClientRoutine() { for v.state { err := v.recvPacketFromClient() if err != nil { log.Fatal(err) } } } // // @Description: 专门负责从客户端接收MIN包的协程 // @receiver v // @return error // func (v *DemoServer) recvPacketFromClient() error { interest, err := v.mFace.ReceiveInterest(-1) log.Println("recv interest packet from client: ", byteToString(interest.GetValue())) if err != nil { return err } v.receivePacketQue <- interest return nil } // // @Description: 启动处理从客户端发来的IP包的协程 // @receiver v // func (v *DemoServer) dealWithRecvPktRoutine() { for v.state { err := v.dealWithRecvPkt() if err != nil { log.Println(err) break } } } // // @Description: 处理客户端发来的IP包 // @receiver v // @return error // func (v *DemoServer) dealWithRecvPkt() error { interest, ok := <-v.receivePacketQue if !ok { return errors.New("get interest packet from receivePacketQue error") } payload := interest.GetValue() payloadLen := len(payload) fmt.Println("demo server received: ", byteToString(payload), " len is: ", payloadLen) v.ReturnHelloToClient(interest, payload) return nil } func (v *DemoServer) ReturnHelloToClient(pkt *packet.Interest, payload []byte) { interestPrefix := pkt.GetName().ToUri() headString := stringToBytes(ResStringHead) sendBytes := make([]byte, len(headString)+len(payload)) for i := 0; i < len(headString); i++ { sendBytes[i] = headString[i] } for i := len(headString); i < len(headString)+len(payload); i++ { sendBytes[i] = payload[i-len(headString)] } err := v.sendDataPacket(&v.mFace, interestPrefix, sendBytes) if err != nil { fmt.Println("send hello for client error!") return } } func stringToBytes(str string) []byte { return *(*[]byte)(unsafe.Pointer(&str)) } func byteToString(bytes []byte) string { return *(*string)(unsafe.Pointer(&bytes)) }