package main import ( "encoding/json" "github.com/taoshihan1991/imaptool/controller" "golang.org/x/net/websocket" "log" "net/http" "time" ) func main() { baseServer:="127.0.0.1:8080" log.Println("start server...\r\ngo:http://"+baseServer) mux:=&http.ServeMux{} //根路径 mux.HandleFunc("/", controller.ActionIndex) //邮件夹 mux.HandleFunc("/list", controller.ActionFolder) //登陆界面 mux.HandleFunc("/login", controller.ActionLogin) //验证接口 mux.HandleFunc("/check", controller.LoginCheck) //邮件夹接口 mux.HandleFunc("/folders", controller.FoldersList) //新邮件夹接口 mux.HandleFunc("/folder_dirs", controller.FolderDir) //邮件接口 mux.HandleFunc("/mail", controller.FolderMail) //详情界面 mux.HandleFunc("/view", controller.ActionDetail) //写信界面 mux.HandleFunc("/write", controller.ActionWrite) //框架界面 mux.HandleFunc("/main", controller.ActionMain) //设置界面 mux.HandleFunc("/setting", controller.ActionSetting) //设置账户接口 mux.HandleFunc("/setting_account", controller.SettingAccount) //发送邮件接口 mux.HandleFunc("/send", controller.FolderSend) //聊天界面 mux.HandleFunc("/chat_main", controller.ActionChatMain) //新邮件提醒服务 mux.HandleFunc("/push_mail", controller.PushMailServer) //聊天服务 mux.Handle("/chat_server",websocket.Handler(ChatServer)) //监听端口 //http.ListenAndServe(":8080", nil) //var myHandler http.Handler s := &http.Server{ Addr: ":8080", Handler: mux, ReadTimeout: 30 * time.Second, WriteTimeout: 30 * time.Second, MaxHeaderBytes: 1 << 20, } s.ListenAndServe() } //兼容之前的聊天服务 func ChatServer(w *websocket.Conn){ var error error for { //接受消息 var receive string if error = websocket.Message.Receive(w, &receive); error != nil { log.Println("接受消息失败", error) break } message := Message{} err := json.Unmarshal([]byte(receive), &message) if err != nil { log.Println(err) } chat := ChatUserMessage{} json.Unmarshal([]byte(receive), &chat) log.Println("客户端:", message) kfMessageData := KfMessageData{ Kf_name: "客服小美", Avatar: "https://ss2.bdstatic.com/70cFvnSh_Q1YnxGkpoWK1HF6hhy/it/u=4217138672,2588039002&fm=26&gp=0.jpg", Kf_id: "KF2", Time: time.Now().Format("2006-01-02 15:04:05"), Content: chat.Data.Content, } switch message.Type.(string) { //用户初始化 case "userInit": clientList[message.Uid.(string)] = w sendMsg := ChatKfMessage{ Message_type: "kf_online", Data: kfMessageData, } jsonStrByte, _ := json.Marshal(sendMsg) log.Println("服务端:", string(jsonStrByte)) websocket.Message.Send(w, string(jsonStrByte)) //正常发送消息 case "chatMessage": sendMsg := ChatKfMessage{ Message_type: "chatMessage", Data: kfMessageData, } jsonStrByte, _ := json.Marshal(sendMsg) log.Println("服务端:", string(jsonStrByte)) websocket.Message.Send(w, string(jsonStrByte)) //回应ping case "ping": sendMsg := PingMessage{ Type: "pong", } jsonStrByte, _ := json.Marshal(sendMsg) log.Println("服务端:", string(jsonStrByte)) websocket.Message.Send(w, string(jsonStrByte)) } } } type Message struct { Type interface{} Uid interface{} Name interface{} Avatar interface{} Group interface{} } type KfMessageData struct { Kf_name interface{} `json:"kf_name"` Avatar interface{} `json:"avatar"` Kf_id interface{} `json:"kf_id"` Time interface{} `json:"time"` Content interface{} `json:"content"` } type UserMessageData struct { From_avatar interface{} `json:"from_avatar"` From_id interface{} `json:"from_id"` From_name interface{} `json:"from_name"` To_id interface{} `json:"to_id"` To_name interface{} `json:"to_name"` Content interface{} `json:"content"` } type ChatKfMessage struct { Message_type interface{} `json:"message_type"` Data KfMessageData `json:"data"` } type ChatUserMessage struct { Message_type interface{} `json:"message_type"` Data UserMessageData `json:"data"` } type PingMessage struct { Type interface{} `json:"type"` } var clientList =make(map[string]*websocket.Conn)