-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcgss.go
152 lines (136 loc) · 2.97 KB
/
cgss.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
//-*- coding: UTF-8 -*-
// Author: afei00123
package main
import (
"ChatManageSystem_IPC/cg"
"ChatManageSystem_IPC/ipc"
"bufio"
"fmt"
"os"
"strconv"
"strings"
)
//调用cg.CenterClient
var centerClient *cg.CenterClient
func startCenterService() error {
server := ipc.NewIpcServer(&cg.CenterServer{})
client := ipc.NewIpcClient(server)
centerClient = &cg.CenterClient{client}
return nil
}
//帮助菜单
func Help(arge []string) int {
fmt.Println(`
Commands:
login <username> <level> <exp>
logout <username>
send <message>
listplayer
quit(q)
help(h)
`)
return 0
}
//退出
func Quit(args []string) int {
return 1
}
//登出
func Logout(args []string) int {
if len(args) != 2 {
fmt.Println("USAGE: logout <username>")
return 0
}
//调用登出方法
centerClient.RemovePlayer(args[1])
return 0
}
//登录
func Login(args []string) int {
if len(args) != 4 {
fmt.Println("USAGE: login <username> <level> <exp>")
return 0
}
//Atoi()函数用于将字符串类型level的整数转换为int类型level
level, err := strconv.Atoi(args[2])
if err != nil {
fmt.Println("无效的参数: <level>应该是一个int类型")
return 0
}
//将字符串类型exp的整数转换为int类型exp
exp, err := strconv.Atoi(args[3])
if err != nil {
fmt.Println("无效的参数: <exp>应该是一个int类型")
return 0
}
player := cg.NewPlayer()
player.Name = args[1]
player.Level = level
player.Exp = exp
//添加用户异常处理
err = centerClient.AddPlayer(player)
if err != nil {
fmt.Println("添加用户失败", err)
}
return 0
}
//列出用户
func ListPlayer(args []string) int {
//调用centerClient.ListPlayer()方法并做异常处理
ps, err := centerClient.ListPlayer("")
if err != nil {
fmt.Println("列出当前用户失败", err)
} else {
for i, v := range ps {
fmt.Println(i + 1, ":", v)
}
}
return 0
}
//发送消息
func Send(args []string) int {
//将字符串切片中存在的所有元素连接为单个字符串
message := strings.Join(args[1:], " ")
err := centerClient.Broadcast(message)
if err != nil {
fmt.Println("发送消息失败", err)
}
return 0
}
//将指令和处理函数一一对应
func GetCommandHandlers() map[string]func(args []string) int {
return map[string]func([]string) int{
"help": Help,
"h": Help,
"quit": Quit,
"q": Quit,
"login": Login,
"logout": Logout,
"listplayer": ListPlayer,
"send": Send,
}
}
func main() {
fmt.Println("休闲服务器解决方案Demo")
startCenterService()
Help(nil)
//接收标准输入
r := bufio.NewReader(os.Stdin)
handlers := GetCommandHandlers()
//循环读取用户输入
for {
//定义指令执行终端标签
fmt.Print("Command>")
b, _, _ := r.ReadLine()
line := string(b)
tokens := strings.Split(line, " ")
if handler, ok := handlers[tokens[0]]; ok {
ret := handler(tokens)
if ret != 0{
break
}
} else {
fmt.Println("未知指令,请重新输入", tokens[0])
}
}
}