observer.go
2.39 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
package main
import (
"WorldTester/conf"
"common/logger"
"math/rand"
"time"
)
func StartObserver(interval int) {
//按照节奏,启动旁观者
i := 0
counter := 0
for uid, _ := range conf.Config.ObserverMap {
if counter >= obeserver_count {
return
}
counter++
conn := getTcpClient(uint32(uid))
var player PlayerInfo
player.uid = uint32(uid)
player.rid = 0
player.conn = conn
player.isObserver = true
m_map_players.Set(uint32(uid), &player)
SendLogin(&player)
StartPlayer(&player)
i++
if i > 5 {
i = 0
time.Sleep(time.Duration(interval))
}
}
}
func HandleObserverLogin(player *PlayerInfo) {
//login response
}
func HandleObserverJoinRoom(player *PlayerInfo) {
//join room response
}
func HandleObserverLeaveRoom(player *PlayerInfo) {
//leave room response
}
func checkObserver(player *PlayerInfo) {
// now := time.Now().Unix()
// if now < player.lastCheckTime + 50{
// return
// }
// player.lastCheckTime = now
// RandomGet(player)
// switch player.state {
// case STATE_PLAYER_INIT:
// return
// case STATE_PLAYER_LOGINED:
// ActionWhenObserverLogined(player)
// return
// case STATE_PLAYER_ENTERED:
// ActionWhenObserverEntered(player)
// return
// default:
// return
// }
}
func GetRoomIDRandomly() uint32 {
items := m_map_rooms.Items()
i := rand.Intn(int(m_map_rooms.Len()) + 1)
idx := 0
for rid, _ := range items {
if i == idx {
return rid
}
idx++
}
return 0
}
func ActionWhenObserverLogined(player *PlayerInfo) {
//登录状态的时候
//随机进入或者不进入房间
//随机挑选一个房间进入
r := rand.Intn(1000)
if r < 500 {
//do nothing
} else {
player.rid = GetRoomIDRandomly()
if player.rid == 0 {
return
}
//SendEnterRoom(player)
logger.Info("obervser uid:%v do enter rid:%v", player.uid, player.rid)
}
}
func ActionWhenObserverEntered(player *PlayerInfo) {
//在房间里面的时候
//随机离开房间,发表情,发言
r := rand.Intn(1000)
if r < 100 {
//leave room
//SendLeaveRoomRequest(player)
logger.Info("observer uid:%v do leave room:%v", player.uid, player.rid)
} else if r < 250 {
//send message
//SendChat(player)
logger.Info("observer uid:%v send chat room:%v", player.uid, player.rid)
} else if r < 400 {
logger.Info("observer uid:%v interactive expressiong room:%v", player.uid, player.rid)
//DoInteractiveExpression(player)
} else {
//do nothing
}
}