mirror of
https://gitee.com/willfree/min-usage.git
synced 2026-10-05 01:15:44 +08:00
72 lines
1.8 KiB
Go
72 lines
1.8 KiB
Go
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)
|
|
}
|