package main import ( "fmt" "log" "minlib/component" "minlib/logicface" "minlib/packet" ) type DemoServer struct { mFace logicface.LogicFace // 用于跟MIR进行通信的logic face receivePacketQue chan *packet.Interest // 从客户端收包后,放入该队列 state bool // 程序生成状态, true 为正常运行, false 为关闭状态 srcIdentifier *component.Identifier // 源地址 } func (s *DemoServer) Init() { s.receivePacketQue = make(chan *packet.Interest, 10000) s.state = true } func (s *DemoServer) Start() error { // 通过 Unix 通道连接MIR err := s.mFace.InitWithUnixSocket(UnixSockPath) if err != nil { log.Fatal(err) } // 注册前缀 s.srcIdentifier, err = component.CreateIdentifierByString(VpnServerPrefix) if err != nil { log.Fatal(err) } err = s.mFace.RegisterIdentifier(s.srcIdentifier, 2000) if err != nil { log.Fatal(err) } log.Println("listen on pull prefix : ", VpnServerPrefix) // 启动处理接收到的包的协程 for i := 0; i < 4; i++ { go s.dealWithRecvPktRoutine() } // 启动从客户端接收包的协程 s.recvPacketFromClientRoutine() return nil } // // @Description: 使用一个face来发送一个data包 // @receiver v // @param face // @param dstIdStr the Interest Name // @param payload 负载 // @return error // func (v *DemoServer) sendDataPacket(face *logicface.LogicFace, dstIdStr string, payload []byte) error { data := new(packet.Data) identifier, err := component.CreateIdentifierByString(dstIdStr) if err != nil { log.Println("create identifier from ", dstIdStr, " error: ", err) return nil } data.SetName(identifier) data.SetTTL(64) data.SetValue(payload) log.Println("send packet to reply : ", dstIdStr) fmt.Println("demo server send: ", byteToString(payload), " len is: ", len(payload)) return face.SendData(data) }