105 lines
2.1 KiB
Go
105 lines
2.1 KiB
Go
package mmlclient
|
||
|
||
import (
|
||
"fmt"
|
||
"strings"
|
||
)
|
||
|
||
// 发送MML原始消息
|
||
// ip 网元IP地址
|
||
// msg 指令
|
||
func MMLSendMsg(ip, msg string) (string, error) {
|
||
// 创建MMLClient实例
|
||
client, err := NewMMLClient(ip)
|
||
if err != nil {
|
||
return "", fmt.Errorf("创建MMLClient实例失败:%v", err)
|
||
}
|
||
defer client.Close()
|
||
|
||
// 发送数据
|
||
err = client.Send(msg)
|
||
if err != nil {
|
||
return "", fmt.Errorf("发送数据失败:%v", err)
|
||
}
|
||
|
||
// 接收数据
|
||
data, err := client.Receive()
|
||
if err != nil {
|
||
return "", fmt.Errorf("接收数据失败:%v", err)
|
||
}
|
||
|
||
return data, nil
|
||
}
|
||
|
||
// 发送MML
|
||
// ip 网元IP地址
|
||
// msg 指令
|
||
func MMLSendMsgToString(ip, msg string) (string, error) {
|
||
// 发送获取数据
|
||
str, err := MMLSendMsg(ip, msg)
|
||
if err != nil {
|
||
return "", err
|
||
}
|
||
|
||
// 截断
|
||
index := strings.Index(str, "\n")
|
||
if index != -1 {
|
||
str = str[:index]
|
||
str = strings.ToLower(str)
|
||
}
|
||
|
||
// 命令成功
|
||
if strings.Contains(str, "ok") || strings.Contains(str, "OK") {
|
||
return str, nil
|
||
}
|
||
|
||
return "", fmt.Errorf(str)
|
||
}
|
||
|
||
// 发送MML
|
||
// ip 网元IP地址
|
||
// msg 指令
|
||
func MMLSendMsgToMap(ip, msg string) (map[string]string, error) {
|
||
// 发送获取数据
|
||
str, err := MMLSendMsg(ip, msg)
|
||
if err != nil {
|
||
return nil, err
|
||
}
|
||
|
||
// 无数据
|
||
if strings.HasPrefix(str, "No Auth Data") {
|
||
return nil, fmt.Errorf("no auth data")
|
||
}
|
||
|
||
// 初始化一个map用于存储拆分后的键值对
|
||
m := make(map[string]string)
|
||
|
||
var items []string
|
||
if strings.Contains(str, "\r\n") {
|
||
// 按照分隔符"\r\n"进行拆分
|
||
items = strings.Split(str, "\r\n")
|
||
} else if strings.Contains(str, "\n") {
|
||
// 按照分隔符"\n"进行拆分
|
||
items = strings.Split(str, "\n")
|
||
}
|
||
|
||
// 遍历拆分后的结果
|
||
for _, item := range items {
|
||
var pair []string
|
||
|
||
if strings.Contains(item, "=") {
|
||
// 按照分隔符"="进行拆分键值对
|
||
pair = strings.Split(item, "=")
|
||
} else if strings.Contains(item, ":") {
|
||
// 按照分隔符":"进行拆分键值对
|
||
pair = strings.Split(item, ":")
|
||
}
|
||
|
||
if len(pair) == 2 {
|
||
// 将键值对存入map中
|
||
m[pair[0]] = pair[1]
|
||
}
|
||
}
|
||
return m, err
|
||
}
|