diff --git a/api/connection.go b/api/connection.go new file mode 100644 index 0000000000000000000000000000000000000000..778f64ec17cd4fd767e18d43231361d3aff70366 --- /dev/null +++ b/api/connection.go @@ -0,0 +1 @@ +package api diff --git a/api/router.go b/api/router.go index ba4244b836a2719d9d1d492897391d362eaca41f..656f88d6e58372bdead39cdcac122b33d31e1220 100644 --- a/api/router.go +++ b/api/router.go @@ -24,12 +24,26 @@ type paramId2 struct { func RegisterRoutes(app *gin.RouterGroup) { - app.GET("/channels", channelList) - app.POST("/channels", channelList) - app.POST("/channel", channelCreate) - app.DELETE("/channel/:id", channelDelete) - app.PUT("/channel/:id", channelEdit) - app.GET("/channel/:id", channelGet) + + app.POST("/login", authLogin) + app.DELETE("/logout", authLogout) + app.POST("/password", authPassword) + + //TODO 转移至子目录,并使用中间件,检查session及权限 + app.GET("/channels") + app.POST("/channels") + app.POST("/channel") + app.DELETE("/channel/:id") + app.PUT("/channel/:id") + app.GET("/channel/:id") + app.GET("/channel/:id/start") + app.GET("/channel/:id/stop") + + app.GET("/channel/:id/connections") + app.POST("/channel/:id/connections") + app.DELETE("/channel/:id/connection/:id2") //关闭连接 + app.GET("/channel/:id/connection/:id2/statistic") + } diff --git a/dtu/channel.go b/dtu/channel.go index 09aa7dd177bb3027897d4bf5da478b07733a2dbe..277c846b1d750cff54df4c944f0a1149e9324e82 100644 --- a/dtu/channel.go +++ b/dtu/channel.go @@ -18,12 +18,15 @@ type Channel struct { listener net.Listener packetConn net.PacketConn packetIndexes sync.Map + + connections sync.Map + //自增ID + increment int } func NewChannel(channel *storage.Channel) *Channel { return &Channel{ Channel: *channel, - //connections: make([]Connection, 0), } } @@ -105,7 +108,7 @@ func (c *Channel) accept() { func (c *Channel) receive(conn net.Conn) { client := newConnection(conn) client.channel = c - //c.connections = append(c.connections, client) + c.storeConnection(client) buf := make([]byte, 1024) for client.conn != nil { @@ -121,6 +124,14 @@ func (c *Channel) receive(conn net.Conn) { } +func (c *Channel) storeConnection(conn *Connection) { + c.increment++ + conn.ID = c.increment + + //根据ID保存 + c.connections.Store(c.ID, conn) +} + func (c *Channel) receivePacket() { buf := make([]byte, 1024) for c.packetConn != nil { @@ -140,6 +151,11 @@ func (c *Channel) receivePacket() { } else { client = newPacketConnection(c.packetConn, addr) client.channel = c + + //根据ID保存 + c.storeConnection(client) + + //根据地址保存,收到UDP包之后,方便索引 c.packetIndexes.Store(key, client) } diff --git a/dtu/conn.go b/dtu/conn.go index 7ff28d19d0c44410f20357bb8b2377b75db5a352..a9ccb0327dfa147cd2bc96c5c2867973b7072c66 100644 --- a/dtu/conn.go +++ b/dtu/conn.go @@ -11,6 +11,8 @@ import ( ) type Connection struct { + ID int + Error string Serial string RemoteAddr net.Addr @@ -84,7 +86,6 @@ func (c *Connection) Send(buf []byte) (int, error) { return 0, errors.New("错误的链接类型") } - func (c *Connection) Close() error { return c.conn.(net.Conn).Close() } @@ -96,10 +97,9 @@ func newConnection(conn net.Conn) *Connection { } } - func newPacketConnection(conn net.PacketConn, addr net.Addr) *Connection { return &Connection{ - RemoteAddr: addr, - conn: conn, + RemoteAddr: addr, + conn: conn, } }