1、工程代码
2、编译及运行
1、工程目录结构
$ tree cgss
cgss
├── cgss.go
└── src
├── cg
│ ├── centerclient.go
│ ├── center.go
│ └── player.go
└── ipc
├── client.go
├── ipc_test.go
└── server.go
1.1)主文件cgss.go 文件代码
1 package main 2 3 import ( 4 "bufio" 5 "fmt" 6 "os" 7 "strconv" 8 "strings" 9 10 "cg" 11 "ipc" 12 ) 13 14 var centerClient * cg.CenterClient 15 16 func startCenterService() error { 17 server := ipc.NewIpcServer(&cg.CenterServer{}) 18 client := ipc.NewIpcClient(server) 19 centerClient = &cg.CenterClient{client} 20 21 return nil 22 } 23 24 func Help(args []string) int { 25 fmt.Println(` 26 Commands: 27 login <userbane><level><exp> 28 logout <username> 29 send <message> 30 listplayer 31 quit(q) 32 help(h) 33 `) 34 return 0 35 } 36 37 func Quit(args []string) int { 38 return 1 39 } 40 41 func Logout(args []string) int { 42 if len (args) != 2 { 43 fmt.Println("USAGE: logout <username>") 44 return 0 45 } 46 centerClient.RemovePlayer(args[1]) 47 48 return 0 49 } 50 51 func Login(args []string) int { 52 if len(args) != 4 { 53 fmt.Println("USAGE: login <username><level><exp>") 54 return 0 55 } 56 57 level, err := strconv.Atoi(args[2]) 58 if err != nil { 59 fmt.Println("Invaild Parameter : <level> should be an integer.") 60 return 0 61 } 62 exp, err := strconv.Atoi(args[3]) 63 if err != nil { 64 fmt.Println("Invaild Parameter : <exp> should be an integer.") 65 return 0 66 } 67 player := cg.NewPlayer() 68 player.Name = args[1] 69 player.Level = level 70 player.Exp = exp 71 72 err = centerClient.AddPlayer(player) 73 if err != nil { 74 fmt.Println("Faild adding player", err) 75 } 76 77 return 0 78 } 79 80 func ListPlayer(args []string) int { 81 ps , err := centerClient.ListPlayer("") 82 if err != nil { 83 fmt.Println("Faild. ", err) 84 } else { 85 for i, v := range ps { 86 fmt.Println(i + 1, ":", v) 87 } 88 } 89 return 0 90 } 91 92 func Send(args []string) int { 93 message := strings.Join(args[1:], " ") 94 95 err := centerClient.Broadcast(message) 96 if err != nil { 97 fmt.Println("Faild. ", err) 98 } 99 100 return 0 101 } 102 103 func GetCommandHandlers() map[string] func(args[]string) int { 104 return map[string]func([]string) int { 105 "help" : Help, 106 "h" : Help, 107 "quit" : Quit, 108 "q" : Quit, 109 "login" : Login, 110 "logout": Logout, 111 "listplayer": ListPlayer, 112 "send" : Send, 113 } 114 } 115 116 func main() { 117 fmt.Println("Casual Game Server Soluion") 118 119 startCenterService() 120 121 Help(nil) 122 123 r := bufio.NewReader(os.Stdin) 124 125 handlers := GetCommandHandlers() 126 127 for { 128 fmt.Print("command> ") 129 b, _, _ := r.ReadLine() 130 line := string(b) 131 132 tokens := strings.Split(line, " ") 133 134 if handler, ok := handlers[tokens[0]]; ok { 135 ret := handler(tokens) 136 if ret != 0 { 137 break 138 } 139 } else { 140 fmt.Println("Unknown command : ", tokens[0]) 141 } 142 } 143 }