You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
go-fly/server.go

152 lines
4.2 KiB

5 years ago
package main
import (
"encoding/json"
"github.com/taoshihan1991/imaptool/controller"
5 years ago
"golang.org/x/net/websocket"
5 years ago
"log"
"net/http"
5 years ago
"time"
5 years ago
)
func main() {
5 years ago
baseServer:="127.0.0.1:8080"
log.Println("start server...\r\ngohttp://"+baseServer)
5 years ago
mux:=&http.ServeMux{}
//根路径
5 years ago
mux.HandleFunc("/", controller.ActionIndex)
//邮件夹
5 years ago
mux.HandleFunc("/list", controller.ActionFolder)
//登陆界面
5 years ago
mux.HandleFunc("/login", controller.ActionLogin)
//验证接口
5 years ago
mux.HandleFunc("/check", controller.LoginCheck)
//邮件夹接口
5 years ago
mux.HandleFunc("/folders", controller.FoldersList)
//新邮件夹接口
5 years ago
mux.HandleFunc("/folder_dirs", controller.FolderDir)
//邮件接口
5 years ago
mux.HandleFunc("/mail", controller.FolderMail)
//详情界面
5 years ago
mux.HandleFunc("/view", controller.ActionDetail)
//写信界面
5 years ago
mux.HandleFunc("/write", controller.ActionWrite)
//框架界面
5 years ago
mux.HandleFunc("/main", controller.ActionMain)
//设置界面
5 years ago
mux.HandleFunc("/setting", controller.ActionSetting)
//设置账户接口
5 years ago
mux.HandleFunc("/setting_account", controller.SettingAccount)
//发送邮件接口
5 years ago
mux.HandleFunc("/send", controller.FolderSend)
5 years ago
//聊天界面
5 years ago
mux.HandleFunc("/chat_main", controller.ActionChatMain)
//新邮件提醒服务
5 years ago
mux.HandleFunc("/push_mail", controller.PushMailServer)
5 years ago
//聊天服务
mux.Handle("/chat_server",websocket.Handler(ChatServer))
5 years ago
//监听端口
5 years ago
//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()
5 years ago
}
5 years ago
//兼容之前的聊天服务
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":
5 years ago
sendMsg := ChatKfMessage{
Message_type: "chatMessage",
Data: kfMessageData,
}
jsonStrByte, _ := json.Marshal(sendMsg)
log.Println("服务端:", string(jsonStrByte))
websocket.Message.Send(w, string(jsonStrByte))
//回应ping
case "ping":
5 years ago
sendMsg := PingMessage{
Type: "pong",
}
jsonStrByte, _ := json.Marshal(sendMsg)
log.Println("服务端:", string(jsonStrByte))
websocket.Message.Send(w, string(jsonStrByte))
}
}
5 years ago
}
5 years ago
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"`
}
5 years ago
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)