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 }
View Code

相关文章: