online offline notice
This commit is contained in:
parent
d92719e20e
commit
8c0fa2a217
|
@ -99,6 +99,15 @@ func showMenu(name string, ms process.Ms) {
|
|||
case 2:
|
||||
sendMessage(ms.Conn)
|
||||
case 4:
|
||||
err := process.WriteConn(ms.Conn, message.Message{
|
||||
Type: "offline",
|
||||
Code: 0,
|
||||
Msg: "",
|
||||
Data: nil,
|
||||
})
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
}
|
||||
menu1 <- 1
|
||||
return
|
||||
}
|
||||
|
@ -167,7 +176,10 @@ func handleMsg() { //处理
|
|||
fmt.Printf("%d\t%s\n", pre.Id, pre.Name)
|
||||
}
|
||||
menu2 <- 1
|
||||
case "notice":
|
||||
fmt.Printf("\n系统:%s\n", c.Msg.Msg)
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
19
dao/dao.go
19
dao/dao.go
|
@ -15,6 +15,25 @@ func init() {
|
|||
Ctx = context.Background()
|
||||
}
|
||||
|
||||
func UserInfo(id int) *user.User {
|
||||
rd := rdm.GetRdm()
|
||||
ctx := context.Background()
|
||||
key := user.GetUserKey(id)
|
||||
u := rd.HGetAll(ctx, key).Val()
|
||||
return map2user(u)
|
||||
}
|
||||
|
||||
func map2user(hash map[string]string) *user.User {
|
||||
id, _ := strconv.Atoi(hash["id"])
|
||||
sex, _ := strconv.Atoi(hash["sex"])
|
||||
return &user.User{
|
||||
Id: id,
|
||||
Name: hash["name"],
|
||||
Sex: int8(sex),
|
||||
Password: hash["password"],
|
||||
}
|
||||
}
|
||||
|
||||
func AddUser(u user.User) error {
|
||||
getRdm := rdm.GetRdm()
|
||||
if u.Name == "" {
|
||||
|
|
|
@ -95,6 +95,15 @@ func (server *Server) Process(conn net.Conn) {
|
|||
fmt.Println(read)
|
||||
}
|
||||
|
||||
func notice(message2 message.Message) {
|
||||
for _, userProcess := range process.GetOnlineUsers() {
|
||||
err := process.WriteConn(userProcess.Conn, message2)
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (server *Server) do(s *message.LoginS, conn net.Conn) (string, error) {
|
||||
login, err := server.Login(s.Uid, s.Pw)
|
||||
re := message.Message{
|
||||
|
@ -112,6 +121,12 @@ func (server *Server) do(s *message.LoginS, conn net.Conn) (string, error) {
|
|||
r.Msg = login.Name
|
||||
r.Error = ""
|
||||
r.User = *login
|
||||
notice(message.Message{
|
||||
Type: "notice",
|
||||
Code: 0,
|
||||
Msg: fmt.Sprintf("%s已上线", login.Name),
|
||||
Data: nil,
|
||||
})
|
||||
process.Push(&process.UserProcess{
|
||||
Uid: login.Id,
|
||||
Conn: conn,
|
||||
|
@ -180,6 +195,20 @@ func (s *Server) processConn() {
|
|||
if err != nil {
|
||||
fmt.Println(err)
|
||||
}
|
||||
case "offline":
|
||||
id := process.Disconnect(c.Conn)
|
||||
u := dao.UserInfo(id)
|
||||
for _, userProcess := range process.GetOnlineUsers() {
|
||||
err := process.WriteConn(userProcess.Conn, message.Message{
|
||||
Type: "notice",
|
||||
Code: 0,
|
||||
Msg: "用户" + u.Name + "已下线",
|
||||
Data: nil,
|
||||
})
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
package process
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"net"
|
||||
)
|
||||
|
||||
|
@ -31,11 +32,13 @@ func Del(id int) {
|
|||
delete(onlineUsers, id)
|
||||
}
|
||||
|
||||
func Disconnect(conn net.Conn) {
|
||||
func Disconnect(conn net.Conn) int {
|
||||
for u, process := range GetOnlineUsers() {
|
||||
if conn.RemoteAddr() == process.Conn.RemoteAddr() {
|
||||
fmt.Println("用户", u, "已下线")
|
||||
delete(onlineUsers, u)
|
||||
break
|
||||
return u
|
||||
}
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user