88 lines
1.8 KiB
Go
88 lines
1.8 KiB
Go
package mmlclient
|
||
|
||
import (
|
||
"bufio"
|
||
"fmt"
|
||
"io"
|
||
"net"
|
||
"time"
|
||
|
||
"be.ems/lib/core/conf"
|
||
)
|
||
|
||
// 定义MMLClient结构体
|
||
type MMLClient struct {
|
||
awaitTime time.Duration // 等待时间
|
||
conn net.Conn
|
||
reader *bufio.Reader
|
||
size int // 包含字符
|
||
}
|
||
|
||
// 封装NewMMLClient函数,用于创建MMLClient实例
|
||
// 网元UDM的IP地址 "198.51.100.1"
|
||
func NewMMLClient(ip string) (*MMLClient, error) {
|
||
// 创建TCP连接
|
||
portMML := conf.Get("mml.port").(int)
|
||
hostMML := fmt.Sprintf("%s:%d", ip, portMML)
|
||
conn, err := net.Dial("tcp", hostMML)
|
||
if err != nil {
|
||
return nil, err
|
||
}
|
||
|
||
// 进行登录
|
||
usernameMML := conf.Get("mml.user").(string)
|
||
passwordMML := conf.Get("mml.password").(string)
|
||
fmt.Fprintln(conn, usernameMML)
|
||
fmt.Fprintln(conn, passwordMML)
|
||
|
||
// 发送后等待
|
||
awaitTime := time.Duration(300) * time.Millisecond
|
||
time.Sleep(awaitTime)
|
||
|
||
// 读取内容
|
||
buf := make([]byte, 1024*1024*1)
|
||
n, err := conn.Read(buf)
|
||
if err != nil {
|
||
return nil, err
|
||
}
|
||
|
||
// 创建MMLClient实例
|
||
client := &MMLClient{
|
||
conn: conn,
|
||
reader: bufio.NewReader(conn),
|
||
awaitTime: awaitTime,
|
||
size: n,
|
||
}
|
||
|
||
return client, nil
|
||
}
|
||
|
||
// 封装Send函数,用于向TCP连接发送数据
|
||
func (c *MMLClient) Send(msg string) error {
|
||
_, err := fmt.Fprintln(c.conn, msg)
|
||
if err != nil {
|
||
return err
|
||
}
|
||
time.Sleep(c.awaitTime)
|
||
return nil
|
||
}
|
||
|
||
// 封装Receive函数,用于从TCP连接中接收数据
|
||
func (c *MMLClient) Receive() (string, error) {
|
||
buf := make([]byte, 1024*1024*1)
|
||
n, err := c.reader.Read(buf)
|
||
if err != nil {
|
||
if err == io.EOF {
|
||
return "", fmt.Errorf("server closed the connection")
|
||
}
|
||
return "", err
|
||
}
|
||
c.size += n
|
||
return string(buf[0:n]), nil
|
||
}
|
||
|
||
// 封装Close函数,用于关闭TCP连接
|
||
func (c *MMLClient) Close() error {
|
||
return c.conn.Close()
|
||
}
|