Ver código fonte

Merge branch 'master' of http://120.76.130.29:3000/xx/ludo_server

Gogs 2 dias atrás
pai
commit
f0bb4e35c5

+ 4 - 0
bin/client_msg/common.proto

@@ -107,6 +107,10 @@ message SendRoleMove {
   string roleId = 2;
 }
 
+message SendQuitRoom {
+  roleType color = 1;  // 
+}
+
 message NotifyPlayerSzNumber {
   roleType color = 1;  // 
   int32 szNumber = 2;   // 

+ 3 - 2
src/server/game/ludo/battle.go

@@ -234,9 +234,10 @@ func (room_info *RoomInfoWrapper) CancelCountdownPlayerOpt() {
 // 房间里通知所有玩家
 func (room_info *RoomInfoWrapper) notify_to_all_player(message interface{}) {
 	for i := range room_info.Colors {
-		user_id := room_info.Colors[i].MId
+		color_data := room_info.Colors[i]
+		user_id := color_data.MId
 		user_agent := getAgentByUserId(user_id)
-		if user_agent != nil {
+		if user_agent != nil && !color_data.IsKick {
 			user_agent.WriteMsg(message)
 		}
 	}

+ 24 - 0
src/server/game/ludo/color_recv.go

@@ -56,3 +56,27 @@ func RecvPlayerSzNumber(args []interface{}) {
 	}
 
 }
+
+// 接受玩家离开消息
+func RecvPlayerLeave(args []interface{}) {
+	m := args[0].(*msg.SendQuitRoom)
+	a := args[1].(gate.Agent)
+	fmt.Printf("接受玩家摇筛子消息:%v\n", m)
+	ud := a.UserData()
+	room_id := ud.(*msg.UserInfo).RoomId
+	fmt.Printf("玩家房间id%d\n", room_id)
+	if room_id == 0 {
+
+	} else {
+		room_info := GetBattleRoomById(room_id)
+
+		if room_info != nil {
+			color_data := room_info.getColorDataByColor(m.Color)
+			color_data.IsKick = true
+			room_info.kickColor(m.Color)
+			room_info.kick_color_of_room(m.Color)
+		}
+
+	}
+
+}

+ 1 - 0
src/server/gate/router.go

@@ -15,6 +15,7 @@ func init() {
 	msg.Processor.SetRouter(&msg.ReqHeartBeat{}, game.ChanRPC)
 	msg.Processor.SetRouter(&msg.SendColorSz{}, game.ChanRPC)
 	msg.Processor.SetRouter(&msg.SendRoleMove{}, game.ChanRPC)
+	msg.Processor.SetRouter(&msg.SendQuitRoom{}, game.ChanRPC)
 	msg.Processor.SetRouter(&msg.MatchLudo{}, game.ChanRPC)
 
 }

+ 181 - 133
src/server/msg/common.pb.go

@@ -937,6 +937,50 @@ func (x *SendRoleMove) GetRoleId() string {
 	return ""
 }
 
+type SendQuitRoom struct {
+	state         protoimpl.MessageState `protogen:"open.v1"`
+	Color         RoleType               `protobuf:"varint,1,opt,name=color,proto3,enum=RoleType" json:"color,omitempty"` //
+	unknownFields protoimpl.UnknownFields
+	sizeCache     protoimpl.SizeCache
+}
+
+func (x *SendQuitRoom) Reset() {
+	*x = SendQuitRoom{}
+	mi := &file_common_proto_msgTypes[7]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *SendQuitRoom) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*SendQuitRoom) ProtoMessage() {}
+
+func (x *SendQuitRoom) ProtoReflect() protoreflect.Message {
+	mi := &file_common_proto_msgTypes[7]
+	if x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use SendQuitRoom.ProtoReflect.Descriptor instead.
+func (*SendQuitRoom) Descriptor() ([]byte, []int) {
+	return file_common_proto_rawDescGZIP(), []int{7}
+}
+
+func (x *SendQuitRoom) GetColor() RoleType {
+	if x != nil {
+		return x.Color
+	}
+	return RoleType_ROLE_TYPE_UNKNOWN
+}
+
 type NotifyPlayerSzNumber struct {
 	state         protoimpl.MessageState `protogen:"open.v1"`
 	Color         RoleType               `protobuf:"varint,1,opt,name=color,proto3,enum=RoleType" json:"color,omitempty"` //
@@ -948,7 +992,7 @@ type NotifyPlayerSzNumber struct {
 
 func (x *NotifyPlayerSzNumber) Reset() {
 	*x = NotifyPlayerSzNumber{}
-	mi := &file_common_proto_msgTypes[7]
+	mi := &file_common_proto_msgTypes[8]
 	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 	ms.StoreMessageInfo(mi)
 }
@@ -960,7 +1004,7 @@ func (x *NotifyPlayerSzNumber) String() string {
 func (*NotifyPlayerSzNumber) ProtoMessage() {}
 
 func (x *NotifyPlayerSzNumber) ProtoReflect() protoreflect.Message {
-	mi := &file_common_proto_msgTypes[7]
+	mi := &file_common_proto_msgTypes[8]
 	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -973,7 +1017,7 @@ func (x *NotifyPlayerSzNumber) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use NotifyPlayerSzNumber.ProtoReflect.Descriptor instead.
 func (*NotifyPlayerSzNumber) Descriptor() ([]byte, []int) {
-	return file_common_proto_rawDescGZIP(), []int{7}
+	return file_common_proto_rawDescGZIP(), []int{8}
 }
 
 func (x *NotifyPlayerSzNumber) GetColor() RoleType {
@@ -1008,7 +1052,7 @@ type NotifyPlayerMove struct {
 
 func (x *NotifyPlayerMove) Reset() {
 	*x = NotifyPlayerMove{}
-	mi := &file_common_proto_msgTypes[8]
+	mi := &file_common_proto_msgTypes[9]
 	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 	ms.StoreMessageInfo(mi)
 }
@@ -1020,7 +1064,7 @@ func (x *NotifyPlayerMove) String() string {
 func (*NotifyPlayerMove) ProtoMessage() {}
 
 func (x *NotifyPlayerMove) ProtoReflect() protoreflect.Message {
-	mi := &file_common_proto_msgTypes[8]
+	mi := &file_common_proto_msgTypes[9]
 	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -1033,7 +1077,7 @@ func (x *NotifyPlayerMove) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use NotifyPlayerMove.ProtoReflect.Descriptor instead.
 func (*NotifyPlayerMove) Descriptor() ([]byte, []int) {
-	return file_common_proto_rawDescGZIP(), []int{8}
+	return file_common_proto_rawDescGZIP(), []int{9}
 }
 
 func (x *NotifyPlayerMove) GetColor() RoleType {
@@ -1069,7 +1113,7 @@ type NotifyPlayerOpt struct {
 
 func (x *NotifyPlayerOpt) Reset() {
 	*x = NotifyPlayerOpt{}
-	mi := &file_common_proto_msgTypes[9]
+	mi := &file_common_proto_msgTypes[10]
 	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 	ms.StoreMessageInfo(mi)
 }
@@ -1081,7 +1125,7 @@ func (x *NotifyPlayerOpt) String() string {
 func (*NotifyPlayerOpt) ProtoMessage() {}
 
 func (x *NotifyPlayerOpt) ProtoReflect() protoreflect.Message {
-	mi := &file_common_proto_msgTypes[9]
+	mi := &file_common_proto_msgTypes[10]
 	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -1094,7 +1138,7 @@ func (x *NotifyPlayerOpt) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use NotifyPlayerOpt.ProtoReflect.Descriptor instead.
 func (*NotifyPlayerOpt) Descriptor() ([]byte, []int) {
-	return file_common_proto_rawDescGZIP(), []int{9}
+	return file_common_proto_rawDescGZIP(), []int{10}
 }
 
 func (x *NotifyPlayerOpt) GetColor() RoleType {
@@ -1137,7 +1181,7 @@ type NotifyPlayerStatus struct {
 
 func (x *NotifyPlayerStatus) Reset() {
 	*x = NotifyPlayerStatus{}
-	mi := &file_common_proto_msgTypes[10]
+	mi := &file_common_proto_msgTypes[11]
 	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 	ms.StoreMessageInfo(mi)
 }
@@ -1149,7 +1193,7 @@ func (x *NotifyPlayerStatus) String() string {
 func (*NotifyPlayerStatus) ProtoMessage() {}
 
 func (x *NotifyPlayerStatus) ProtoReflect() protoreflect.Message {
-	mi := &file_common_proto_msgTypes[10]
+	mi := &file_common_proto_msgTypes[11]
 	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -1162,7 +1206,7 @@ func (x *NotifyPlayerStatus) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use NotifyPlayerStatus.ProtoReflect.Descriptor instead.
 func (*NotifyPlayerStatus) Descriptor() ([]byte, []int) {
-	return file_common_proto_rawDescGZIP(), []int{10}
+	return file_common_proto_rawDescGZIP(), []int{11}
 }
 
 func (x *NotifyPlayerStatus) GetColor() RoleType {
@@ -1203,7 +1247,7 @@ type NotifySettlement struct {
 
 func (x *NotifySettlement) Reset() {
 	*x = NotifySettlement{}
-	mi := &file_common_proto_msgTypes[11]
+	mi := &file_common_proto_msgTypes[12]
 	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 	ms.StoreMessageInfo(mi)
 }
@@ -1215,7 +1259,7 @@ func (x *NotifySettlement) String() string {
 func (*NotifySettlement) ProtoMessage() {}
 
 func (x *NotifySettlement) ProtoReflect() protoreflect.Message {
-	mi := &file_common_proto_msgTypes[11]
+	mi := &file_common_proto_msgTypes[12]
 	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -1228,7 +1272,7 @@ func (x *NotifySettlement) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use NotifySettlement.ProtoReflect.Descriptor instead.
 func (*NotifySettlement) Descriptor() ([]byte, []int) {
-	return file_common_proto_rawDescGZIP(), []int{11}
+	return file_common_proto_rawDescGZIP(), []int{12}
 }
 
 func (x *NotifySettlement) GetColor() RoleType {
@@ -1254,7 +1298,7 @@ type NotifyUpdateRoomInfo struct {
 
 func (x *NotifyUpdateRoomInfo) Reset() {
 	*x = NotifyUpdateRoomInfo{}
-	mi := &file_common_proto_msgTypes[12]
+	mi := &file_common_proto_msgTypes[13]
 	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 	ms.StoreMessageInfo(mi)
 }
@@ -1266,7 +1310,7 @@ func (x *NotifyUpdateRoomInfo) String() string {
 func (*NotifyUpdateRoomInfo) ProtoMessage() {}
 
 func (x *NotifyUpdateRoomInfo) ProtoReflect() protoreflect.Message {
-	mi := &file_common_proto_msgTypes[12]
+	mi := &file_common_proto_msgTypes[13]
 	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -1279,7 +1323,7 @@ func (x *NotifyUpdateRoomInfo) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use NotifyUpdateRoomInfo.ProtoReflect.Descriptor instead.
 func (*NotifyUpdateRoomInfo) Descriptor() ([]byte, []int) {
-	return file_common_proto_rawDescGZIP(), []int{12}
+	return file_common_proto_rawDescGZIP(), []int{13}
 }
 
 func (x *NotifyUpdateRoomInfo) GetRoomInfo() *RoomInfo {
@@ -1303,7 +1347,7 @@ type UserInfo struct {
 
 func (x *UserInfo) Reset() {
 	*x = UserInfo{}
-	mi := &file_common_proto_msgTypes[13]
+	mi := &file_common_proto_msgTypes[14]
 	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 	ms.StoreMessageInfo(mi)
 }
@@ -1315,7 +1359,7 @@ func (x *UserInfo) String() string {
 func (*UserInfo) ProtoMessage() {}
 
 func (x *UserInfo) ProtoReflect() protoreflect.Message {
-	mi := &file_common_proto_msgTypes[13]
+	mi := &file_common_proto_msgTypes[14]
 	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -1328,7 +1372,7 @@ func (x *UserInfo) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use UserInfo.ProtoReflect.Descriptor instead.
 func (*UserInfo) Descriptor() ([]byte, []int) {
-	return file_common_proto_rawDescGZIP(), []int{13}
+	return file_common_proto_rawDescGZIP(), []int{14}
 }
 
 func (x *UserInfo) GetUserId() string {
@@ -1377,7 +1421,7 @@ type ReqLogin struct {
 
 func (x *ReqLogin) Reset() {
 	*x = ReqLogin{}
-	mi := &file_common_proto_msgTypes[14]
+	mi := &file_common_proto_msgTypes[15]
 	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 	ms.StoreMessageInfo(mi)
 }
@@ -1389,7 +1433,7 @@ func (x *ReqLogin) String() string {
 func (*ReqLogin) ProtoMessage() {}
 
 func (x *ReqLogin) ProtoReflect() protoreflect.Message {
-	mi := &file_common_proto_msgTypes[14]
+	mi := &file_common_proto_msgTypes[15]
 	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -1402,7 +1446,7 @@ func (x *ReqLogin) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use ReqLogin.ProtoReflect.Descriptor instead.
 func (*ReqLogin) Descriptor() ([]byte, []int) {
-	return file_common_proto_rawDescGZIP(), []int{14}
+	return file_common_proto_rawDescGZIP(), []int{15}
 }
 
 func (x *ReqLogin) GetAccount() string {
@@ -1432,7 +1476,7 @@ type ResLogin struct {
 
 func (x *ResLogin) Reset() {
 	*x = ResLogin{}
-	mi := &file_common_proto_msgTypes[15]
+	mi := &file_common_proto_msgTypes[16]
 	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 	ms.StoreMessageInfo(mi)
 }
@@ -1444,7 +1488,7 @@ func (x *ResLogin) String() string {
 func (*ResLogin) ProtoMessage() {}
 
 func (x *ResLogin) ProtoReflect() protoreflect.Message {
-	mi := &file_common_proto_msgTypes[15]
+	mi := &file_common_proto_msgTypes[16]
 	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -1457,7 +1501,7 @@ func (x *ResLogin) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use ResLogin.ProtoReflect.Descriptor instead.
 func (*ResLogin) Descriptor() ([]byte, []int) {
-	return file_common_proto_rawDescGZIP(), []int{15}
+	return file_common_proto_rawDescGZIP(), []int{16}
 }
 
 func (x *ResLogin) GetUserId() string {
@@ -1501,7 +1545,7 @@ type ReqRegister struct {
 
 func (x *ReqRegister) Reset() {
 	*x = ReqRegister{}
-	mi := &file_common_proto_msgTypes[16]
+	mi := &file_common_proto_msgTypes[17]
 	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 	ms.StoreMessageInfo(mi)
 }
@@ -1513,7 +1557,7 @@ func (x *ReqRegister) String() string {
 func (*ReqRegister) ProtoMessage() {}
 
 func (x *ReqRegister) ProtoReflect() protoreflect.Message {
-	mi := &file_common_proto_msgTypes[16]
+	mi := &file_common_proto_msgTypes[17]
 	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -1526,7 +1570,7 @@ func (x *ReqRegister) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use ReqRegister.ProtoReflect.Descriptor instead.
 func (*ReqRegister) Descriptor() ([]byte, []int) {
-	return file_common_proto_rawDescGZIP(), []int{16}
+	return file_common_proto_rawDescGZIP(), []int{17}
 }
 
 func (x *ReqRegister) GetNikeName() string {
@@ -1568,7 +1612,7 @@ type ResRegister struct {
 
 func (x *ResRegister) Reset() {
 	*x = ResRegister{}
-	mi := &file_common_proto_msgTypes[17]
+	mi := &file_common_proto_msgTypes[18]
 	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 	ms.StoreMessageInfo(mi)
 }
@@ -1580,7 +1624,7 @@ func (x *ResRegister) String() string {
 func (*ResRegister) ProtoMessage() {}
 
 func (x *ResRegister) ProtoReflect() protoreflect.Message {
-	mi := &file_common_proto_msgTypes[17]
+	mi := &file_common_proto_msgTypes[18]
 	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -1593,7 +1637,7 @@ func (x *ResRegister) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use ResRegister.ProtoReflect.Descriptor instead.
 func (*ResRegister) Descriptor() ([]byte, []int) {
-	return file_common_proto_rawDescGZIP(), []int{17}
+	return file_common_proto_rawDescGZIP(), []int{18}
 }
 
 func (x *ResRegister) GetSuccess() bool {
@@ -1620,7 +1664,7 @@ type EnterHall struct {
 
 func (x *EnterHall) Reset() {
 	*x = EnterHall{}
-	mi := &file_common_proto_msgTypes[18]
+	mi := &file_common_proto_msgTypes[19]
 	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 	ms.StoreMessageInfo(mi)
 }
@@ -1632,7 +1676,7 @@ func (x *EnterHall) String() string {
 func (*EnterHall) ProtoMessage() {}
 
 func (x *EnterHall) ProtoReflect() protoreflect.Message {
-	mi := &file_common_proto_msgTypes[18]
+	mi := &file_common_proto_msgTypes[19]
 	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -1645,7 +1689,7 @@ func (x *EnterHall) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use EnterHall.ProtoReflect.Descriptor instead.
 func (*EnterHall) Descriptor() ([]byte, []int) {
-	return file_common_proto_rawDescGZIP(), []int{18}
+	return file_common_proto_rawDescGZIP(), []int{19}
 }
 
 func (x *EnterHall) GetUserId() string {
@@ -1667,7 +1711,7 @@ type ResEnterHall struct {
 
 func (x *ResEnterHall) Reset() {
 	*x = ResEnterHall{}
-	mi := &file_common_proto_msgTypes[19]
+	mi := &file_common_proto_msgTypes[20]
 	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 	ms.StoreMessageInfo(mi)
 }
@@ -1679,7 +1723,7 @@ func (x *ResEnterHall) String() string {
 func (*ResEnterHall) ProtoMessage() {}
 
 func (x *ResEnterHall) ProtoReflect() protoreflect.Message {
-	mi := &file_common_proto_msgTypes[19]
+	mi := &file_common_proto_msgTypes[20]
 	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -1692,7 +1736,7 @@ func (x *ResEnterHall) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use ResEnterHall.ProtoReflect.Descriptor instead.
 func (*ResEnterHall) Descriptor() ([]byte, []int) {
-	return file_common_proto_rawDescGZIP(), []int{19}
+	return file_common_proto_rawDescGZIP(), []int{20}
 }
 
 func (x *ResEnterHall) GetSuccess() bool {
@@ -1726,7 +1770,7 @@ type LeaveHall struct {
 
 func (x *LeaveHall) Reset() {
 	*x = LeaveHall{}
-	mi := &file_common_proto_msgTypes[20]
+	mi := &file_common_proto_msgTypes[21]
 	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 	ms.StoreMessageInfo(mi)
 }
@@ -1738,7 +1782,7 @@ func (x *LeaveHall) String() string {
 func (*LeaveHall) ProtoMessage() {}
 
 func (x *LeaveHall) ProtoReflect() protoreflect.Message {
-	mi := &file_common_proto_msgTypes[20]
+	mi := &file_common_proto_msgTypes[21]
 	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -1751,7 +1795,7 @@ func (x *LeaveHall) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use LeaveHall.ProtoReflect.Descriptor instead.
 func (*LeaveHall) Descriptor() ([]byte, []int) {
-	return file_common_proto_rawDescGZIP(), []int{20}
+	return file_common_proto_rawDescGZIP(), []int{21}
 }
 
 func (x *LeaveHall) GetUserId() string {
@@ -1773,7 +1817,7 @@ type MatchLudo struct {
 
 func (x *MatchLudo) Reset() {
 	*x = MatchLudo{}
-	mi := &file_common_proto_msgTypes[21]
+	mi := &file_common_proto_msgTypes[22]
 	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 	ms.StoreMessageInfo(mi)
 }
@@ -1785,7 +1829,7 @@ func (x *MatchLudo) String() string {
 func (*MatchLudo) ProtoMessage() {}
 
 func (x *MatchLudo) ProtoReflect() protoreflect.Message {
-	mi := &file_common_proto_msgTypes[21]
+	mi := &file_common_proto_msgTypes[22]
 	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -1798,7 +1842,7 @@ func (x *MatchLudo) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use MatchLudo.ProtoReflect.Descriptor instead.
 func (*MatchLudo) Descriptor() ([]byte, []int) {
-	return file_common_proto_rawDescGZIP(), []int{21}
+	return file_common_proto_rawDescGZIP(), []int{22}
 }
 
 func (x *MatchLudo) GetSelectRoomType() RoomType {
@@ -1834,7 +1878,7 @@ type ResMatchLudo struct {
 
 func (x *ResMatchLudo) Reset() {
 	*x = ResMatchLudo{}
-	mi := &file_common_proto_msgTypes[22]
+	mi := &file_common_proto_msgTypes[23]
 	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 	ms.StoreMessageInfo(mi)
 }
@@ -1846,7 +1890,7 @@ func (x *ResMatchLudo) String() string {
 func (*ResMatchLudo) ProtoMessage() {}
 
 func (x *ResMatchLudo) ProtoReflect() protoreflect.Message {
-	mi := &file_common_proto_msgTypes[22]
+	mi := &file_common_proto_msgTypes[23]
 	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -1859,7 +1903,7 @@ func (x *ResMatchLudo) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use ResMatchLudo.ProtoReflect.Descriptor instead.
 func (*ResMatchLudo) Descriptor() ([]byte, []int) {
-	return file_common_proto_rawDescGZIP(), []int{22}
+	return file_common_proto_rawDescGZIP(), []int{23}
 }
 
 func (x *ResMatchLudo) GetSuccess() bool {
@@ -1894,7 +1938,7 @@ type MsgError struct {
 
 func (x *MsgError) Reset() {
 	*x = MsgError{}
-	mi := &file_common_proto_msgTypes[23]
+	mi := &file_common_proto_msgTypes[24]
 	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 	ms.StoreMessageInfo(mi)
 }
@@ -1906,7 +1950,7 @@ func (x *MsgError) String() string {
 func (*MsgError) ProtoMessage() {}
 
 func (x *MsgError) ProtoReflect() protoreflect.Message {
-	mi := &file_common_proto_msgTypes[23]
+	mi := &file_common_proto_msgTypes[24]
 	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -1919,7 +1963,7 @@ func (x *MsgError) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use MsgError.ProtoReflect.Descriptor instead.
 func (*MsgError) Descriptor() ([]byte, []int) {
-	return file_common_proto_rawDescGZIP(), []int{23}
+	return file_common_proto_rawDescGZIP(), []int{24}
 }
 
 func (x *MsgError) GetErrorCode() int32 {
@@ -1946,7 +1990,7 @@ type UpdateUserInfo struct {
 
 func (x *UpdateUserInfo) Reset() {
 	*x = UpdateUserInfo{}
-	mi := &file_common_proto_msgTypes[24]
+	mi := &file_common_proto_msgTypes[25]
 	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 	ms.StoreMessageInfo(mi)
 }
@@ -1958,7 +2002,7 @@ func (x *UpdateUserInfo) String() string {
 func (*UpdateUserInfo) ProtoMessage() {}
 
 func (x *UpdateUserInfo) ProtoReflect() protoreflect.Message {
-	mi := &file_common_proto_msgTypes[24]
+	mi := &file_common_proto_msgTypes[25]
 	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -1971,7 +2015,7 @@ func (x *UpdateUserInfo) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use UpdateUserInfo.ProtoReflect.Descriptor instead.
 func (*UpdateUserInfo) Descriptor() ([]byte, []int) {
-	return file_common_proto_rawDescGZIP(), []int{24}
+	return file_common_proto_rawDescGZIP(), []int{25}
 }
 
 func (x *UpdateUserInfo) GetInfo() *UserInfo {
@@ -1990,7 +2034,7 @@ type ResHeartBeat struct {
 
 func (x *ResHeartBeat) Reset() {
 	*x = ResHeartBeat{}
-	mi := &file_common_proto_msgTypes[25]
+	mi := &file_common_proto_msgTypes[26]
 	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 	ms.StoreMessageInfo(mi)
 }
@@ -2002,7 +2046,7 @@ func (x *ResHeartBeat) String() string {
 func (*ResHeartBeat) ProtoMessage() {}
 
 func (x *ResHeartBeat) ProtoReflect() protoreflect.Message {
-	mi := &file_common_proto_msgTypes[25]
+	mi := &file_common_proto_msgTypes[26]
 	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -2015,7 +2059,7 @@ func (x *ResHeartBeat) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use ResHeartBeat.ProtoReflect.Descriptor instead.
 func (*ResHeartBeat) Descriptor() ([]byte, []int) {
-	return file_common_proto_rawDescGZIP(), []int{25}
+	return file_common_proto_rawDescGZIP(), []int{26}
 }
 
 func (x *ResHeartBeat) GetMsg() string {
@@ -2034,7 +2078,7 @@ type ReqHeartBeat struct {
 
 func (x *ReqHeartBeat) Reset() {
 	*x = ReqHeartBeat{}
-	mi := &file_common_proto_msgTypes[26]
+	mi := &file_common_proto_msgTypes[27]
 	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 	ms.StoreMessageInfo(mi)
 }
@@ -2046,7 +2090,7 @@ func (x *ReqHeartBeat) String() string {
 func (*ReqHeartBeat) ProtoMessage() {}
 
 func (x *ReqHeartBeat) ProtoReflect() protoreflect.Message {
-	mi := &file_common_proto_msgTypes[26]
+	mi := &file_common_proto_msgTypes[27]
 	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -2059,7 +2103,7 @@ func (x *ReqHeartBeat) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use ReqHeartBeat.ProtoReflect.Descriptor instead.
 func (*ReqHeartBeat) Descriptor() ([]byte, []int) {
-	return file_common_proto_rawDescGZIP(), []int{26}
+	return file_common_proto_rawDescGZIP(), []int{27}
 }
 
 func (x *ReqHeartBeat) GetMsg() string {
@@ -2080,7 +2124,7 @@ type ShopItem struct {
 
 func (x *ShopItem) Reset() {
 	*x = ShopItem{}
-	mi := &file_common_proto_msgTypes[27]
+	mi := &file_common_proto_msgTypes[28]
 	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 	ms.StoreMessageInfo(mi)
 }
@@ -2092,7 +2136,7 @@ func (x *ShopItem) String() string {
 func (*ShopItem) ProtoMessage() {}
 
 func (x *ShopItem) ProtoReflect() protoreflect.Message {
-	mi := &file_common_proto_msgTypes[27]
+	mi := &file_common_proto_msgTypes[28]
 	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -2105,7 +2149,7 @@ func (x *ShopItem) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use ShopItem.ProtoReflect.Descriptor instead.
 func (*ShopItem) Descriptor() ([]byte, []int) {
-	return file_common_proto_rawDescGZIP(), []int{27}
+	return file_common_proto_rawDescGZIP(), []int{28}
 }
 
 func (x *ShopItem) GetName() string {
@@ -2139,7 +2183,7 @@ type BeKickLogin struct {
 
 func (x *BeKickLogin) Reset() {
 	*x = BeKickLogin{}
-	mi := &file_common_proto_msgTypes[28]
+	mi := &file_common_proto_msgTypes[29]
 	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 	ms.StoreMessageInfo(mi)
 }
@@ -2151,7 +2195,7 @@ func (x *BeKickLogin) String() string {
 func (*BeKickLogin) ProtoMessage() {}
 
 func (x *BeKickLogin) ProtoReflect() protoreflect.Message {
-	mi := &file_common_proto_msgTypes[28]
+	mi := &file_common_proto_msgTypes[29]
 	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -2164,7 +2208,7 @@ func (x *BeKickLogin) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use BeKickLogin.ProtoReflect.Descriptor instead.
 func (*BeKickLogin) Descriptor() ([]byte, []int) {
-	return file_common_proto_rawDescGZIP(), []int{28}
+	return file_common_proto_rawDescGZIP(), []int{29}
 }
 
 func (x *BeKickLogin) GetErrMsg() *MsgError {
@@ -2184,7 +2228,7 @@ type ReqShop struct {
 
 func (x *ReqShop) Reset() {
 	*x = ReqShop{}
-	mi := &file_common_proto_msgTypes[29]
+	mi := &file_common_proto_msgTypes[30]
 	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 	ms.StoreMessageInfo(mi)
 }
@@ -2196,7 +2240,7 @@ func (x *ReqShop) String() string {
 func (*ReqShop) ProtoMessage() {}
 
 func (x *ReqShop) ProtoReflect() protoreflect.Message {
-	mi := &file_common_proto_msgTypes[29]
+	mi := &file_common_proto_msgTypes[30]
 	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -2209,7 +2253,7 @@ func (x *ReqShop) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use ReqShop.ProtoReflect.Descriptor instead.
 func (*ReqShop) Descriptor() ([]byte, []int) {
-	return file_common_proto_rawDescGZIP(), []int{29}
+	return file_common_proto_rawDescGZIP(), []int{30}
 }
 
 func (x *ReqShop) GetShopType() int32 {
@@ -2231,7 +2275,7 @@ type ResShop struct {
 
 func (x *ResShop) Reset() {
 	*x = ResShop{}
-	mi := &file_common_proto_msgTypes[30]
+	mi := &file_common_proto_msgTypes[31]
 	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 	ms.StoreMessageInfo(mi)
 }
@@ -2243,7 +2287,7 @@ func (x *ResShop) String() string {
 func (*ResShop) ProtoMessage() {}
 
 func (x *ResShop) ProtoReflect() protoreflect.Message {
-	mi := &file_common_proto_msgTypes[30]
+	mi := &file_common_proto_msgTypes[31]
 	if x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -2256,7 +2300,7 @@ func (x *ResShop) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use ResShop.ProtoReflect.Descriptor instead.
 func (*ResShop) Descriptor() ([]byte, []int) {
-	return file_common_proto_rawDescGZIP(), []int{30}
+	return file_common_proto_rawDescGZIP(), []int{31}
 }
 
 func (x *ResShop) GetSuccess() bool {
@@ -2340,7 +2384,9 @@ const file_common_proto_rawDesc = "" +
 	"\x05color\x18\x01 \x01(\x0e2\t.roleTypeR\x05color\"G\n" +
 	"\fSendRoleMove\x12\x1f\n" +
 	"\x05color\x18\x01 \x01(\x0e2\t.roleTypeR\x05color\x12\x16\n" +
-	"\x06roleId\x18\x02 \x01(\tR\x06roleId\"w\n" +
+	"\x06roleId\x18\x02 \x01(\tR\x06roleId\"/\n" +
+	"\fSendQuitRoom\x12\x1f\n" +
+	"\x05color\x18\x01 \x01(\x0e2\t.roleTypeR\x05color\"w\n" +
 	"\x14NotifyPlayerSzNumber\x12\x1f\n" +
 	"\x05color\x18\x01 \x01(\x0e2\t.roleTypeR\x05color\x12\x1a\n" +
 	"\bszNumber\x18\x02 \x01(\x05R\bszNumber\x12\"\n" +
@@ -2478,7 +2524,7 @@ func file_common_proto_rawDescGZIP() []byte {
 }
 
 var file_common_proto_enumTypes = make([]protoimpl.EnumInfo, 7)
-var file_common_proto_msgTypes = make([]protoimpl.MessageInfo, 31)
+var file_common_proto_msgTypes = make([]protoimpl.MessageInfo, 32)
 var file_common_proto_goTypes = []any{
 	(RoleType)(0),                // 0: roleType
 	(OptType)(0),                 // 1: OptType
@@ -2494,30 +2540,31 @@ var file_common_proto_goTypes = []any{
 	(*MoveStepData)(nil),         // 11: MoveStepData
 	(*SendColorSz)(nil),          // 12: SendColorSz
 	(*SendRoleMove)(nil),         // 13: SendRoleMove
-	(*NotifyPlayerSzNumber)(nil), // 14: NotifyPlayerSzNumber
-	(*NotifyPlayerMove)(nil),     // 15: NotifyPlayerMove
-	(*NotifyPlayerOpt)(nil),      // 16: NotifyPlayerOpt
-	(*NotifyPlayerStatus)(nil),   // 17: NotifyPlayerStatus
-	(*NotifySettlement)(nil),     // 18: NotifySettlement
-	(*NotifyUpdateRoomInfo)(nil), // 19: NotifyUpdateRoomInfo
-	(*UserInfo)(nil),             // 20: UserInfo
-	(*ReqLogin)(nil),             // 21: ReqLogin
-	(*ResLogin)(nil),             // 22: ResLogin
-	(*ReqRegister)(nil),          // 23: ReqRegister
-	(*ResRegister)(nil),          // 24: ResRegister
-	(*EnterHall)(nil),            // 25: EnterHall
-	(*ResEnterHall)(nil),         // 26: ResEnterHall
-	(*LeaveHall)(nil),            // 27: LeaveHall
-	(*MatchLudo)(nil),            // 28: MatchLudo
-	(*ResMatchLudo)(nil),         // 29: ResMatchLudo
-	(*MsgError)(nil),             // 30: MsgError
-	(*UpdateUserInfo)(nil),       // 31: UpdateUserInfo
-	(*ResHeartBeat)(nil),         // 32: ResHeartBeat
-	(*ReqHeartBeat)(nil),         // 33: ReqHeartBeat
-	(*ShopItem)(nil),             // 34: ShopItem
-	(*BeKickLogin)(nil),          // 35: BeKickLogin
-	(*ReqShop)(nil),              // 36: ReqShop
-	(*ResShop)(nil),              // 37: ResShop
+	(*SendQuitRoom)(nil),         // 14: SendQuitRoom
+	(*NotifyPlayerSzNumber)(nil), // 15: NotifyPlayerSzNumber
+	(*NotifyPlayerMove)(nil),     // 16: NotifyPlayerMove
+	(*NotifyPlayerOpt)(nil),      // 17: NotifyPlayerOpt
+	(*NotifyPlayerStatus)(nil),   // 18: NotifyPlayerStatus
+	(*NotifySettlement)(nil),     // 19: NotifySettlement
+	(*NotifyUpdateRoomInfo)(nil), // 20: NotifyUpdateRoomInfo
+	(*UserInfo)(nil),             // 21: UserInfo
+	(*ReqLogin)(nil),             // 22: ReqLogin
+	(*ResLogin)(nil),             // 23: ResLogin
+	(*ReqRegister)(nil),          // 24: ReqRegister
+	(*ResRegister)(nil),          // 25: ResRegister
+	(*EnterHall)(nil),            // 26: EnterHall
+	(*ResEnterHall)(nil),         // 27: ResEnterHall
+	(*LeaveHall)(nil),            // 28: LeaveHall
+	(*MatchLudo)(nil),            // 29: MatchLudo
+	(*ResMatchLudo)(nil),         // 30: ResMatchLudo
+	(*MsgError)(nil),             // 31: MsgError
+	(*UpdateUserInfo)(nil),       // 32: UpdateUserInfo
+	(*ResHeartBeat)(nil),         // 33: ResHeartBeat
+	(*ReqHeartBeat)(nil),         // 34: ReqHeartBeat
+	(*ShopItem)(nil),             // 35: ShopItem
+	(*BeKickLogin)(nil),          // 36: BeKickLogin
+	(*ReqShop)(nil),              // 37: ReqShop
+	(*ResShop)(nil),              // 38: ResShop
 }
 var file_common_proto_depIdxs = []int32{
 	0,  // 0: round.m_color:type_name -> roleType
@@ -2531,45 +2578,46 @@ var file_common_proto_depIdxs = []int32{
 	10, // 8: RoomInfo.finish_colors:type_name -> ColorData
 	10, // 9: RoomInfo.kict_colors:type_name -> ColorData
 	6,  // 10: RoomInfo.room_status:type_name -> roomStatus
-	16, // 11: RoomInfo.cur_color_opt_data:type_name -> NotifyPlayerOpt
+	17, // 11: RoomInfo.cur_color_opt_data:type_name -> NotifyPlayerOpt
 	0,  // 12: RoleData.m_color:type_name -> roleType
 	4,  // 13: RoleData.m_cur_road:type_name -> roadType
 	0,  // 14: ColorData.m_color:type_name -> roleType
 	0,  // 15: SendColorSz.color:type_name -> roleType
 	0,  // 16: SendRoleMove.color:type_name -> roleType
-	0,  // 17: NotifyPlayerSzNumber.color:type_name -> roleType
-	30, // 18: NotifyPlayerSzNumber.err_msg:type_name -> MsgError
-	0,  // 19: NotifyPlayerMove.color:type_name -> roleType
-	11, // 20: NotifyPlayerMove.step:type_name -> MoveStepData
-	9,  // 21: NotifyPlayerMove.kick:type_name -> RoleData
-	0,  // 22: NotifyPlayerOpt.color:type_name -> roleType
-	1,  // 23: NotifyPlayerOpt.opt:type_name -> OptType
-	9,  // 24: NotifyPlayerOpt.canMoveRoles:type_name -> RoleData
-	0,  // 25: NotifyPlayerStatus.color:type_name -> roleType
-	5,  // 26: NotifyPlayerStatus.status:type_name -> playerStatus
-	10, // 27: NotifyPlayerStatus.colors:type_name -> ColorData
-	10, // 28: NotifyPlayerStatus.time_out_color:type_name -> ColorData
-	0,  // 29: NotifySettlement.color:type_name -> roleType
-	10, // 30: NotifySettlement.finish_colors:type_name -> ColorData
-	8,  // 31: NotifyUpdateRoomInfo.room_info:type_name -> RoomInfo
-	20, // 32: ResLogin.userInfo:type_name -> UserInfo
-	30, // 33: ResLogin.err_msg:type_name -> MsgError
-	30, // 34: ResRegister.err_msg:type_name -> MsgError
-	30, // 35: ResEnterHall.err_msg:type_name -> MsgError
-	8,  // 36: ResEnterHall.reconnect_room_info:type_name -> RoomInfo
-	2,  // 37: MatchLudo.select_room_type:type_name -> roomType
-	0,  // 38: MatchLudo.select_color:type_name -> roleType
-	30, // 39: ResMatchLudo.err_msg:type_name -> MsgError
-	8,  // 40: ResMatchLudo.room:type_name -> RoomInfo
-	20, // 41: UpdateUserInfo.info:type_name -> UserInfo
-	30, // 42: BeKickLogin.err_msg:type_name -> MsgError
-	30, // 43: ResShop.err_msg:type_name -> MsgError
-	34, // 44: ResShop.list:type_name -> ShopItem
-	45, // [45:45] is the sub-list for method output_type
-	45, // [45:45] is the sub-list for method input_type
-	45, // [45:45] is the sub-list for extension type_name
-	45, // [45:45] is the sub-list for extension extendee
-	0,  // [0:45] is the sub-list for field type_name
+	0,  // 17: SendQuitRoom.color:type_name -> roleType
+	0,  // 18: NotifyPlayerSzNumber.color:type_name -> roleType
+	31, // 19: NotifyPlayerSzNumber.err_msg:type_name -> MsgError
+	0,  // 20: NotifyPlayerMove.color:type_name -> roleType
+	11, // 21: NotifyPlayerMove.step:type_name -> MoveStepData
+	9,  // 22: NotifyPlayerMove.kick:type_name -> RoleData
+	0,  // 23: NotifyPlayerOpt.color:type_name -> roleType
+	1,  // 24: NotifyPlayerOpt.opt:type_name -> OptType
+	9,  // 25: NotifyPlayerOpt.canMoveRoles:type_name -> RoleData
+	0,  // 26: NotifyPlayerStatus.color:type_name -> roleType
+	5,  // 27: NotifyPlayerStatus.status:type_name -> playerStatus
+	10, // 28: NotifyPlayerStatus.colors:type_name -> ColorData
+	10, // 29: NotifyPlayerStatus.time_out_color:type_name -> ColorData
+	0,  // 30: NotifySettlement.color:type_name -> roleType
+	10, // 31: NotifySettlement.finish_colors:type_name -> ColorData
+	8,  // 32: NotifyUpdateRoomInfo.room_info:type_name -> RoomInfo
+	21, // 33: ResLogin.userInfo:type_name -> UserInfo
+	31, // 34: ResLogin.err_msg:type_name -> MsgError
+	31, // 35: ResRegister.err_msg:type_name -> MsgError
+	31, // 36: ResEnterHall.err_msg:type_name -> MsgError
+	8,  // 37: ResEnterHall.reconnect_room_info:type_name -> RoomInfo
+	2,  // 38: MatchLudo.select_room_type:type_name -> roomType
+	0,  // 39: MatchLudo.select_color:type_name -> roleType
+	31, // 40: ResMatchLudo.err_msg:type_name -> MsgError
+	8,  // 41: ResMatchLudo.room:type_name -> RoomInfo
+	21, // 42: UpdateUserInfo.info:type_name -> UserInfo
+	31, // 43: BeKickLogin.err_msg:type_name -> MsgError
+	31, // 44: ResShop.err_msg:type_name -> MsgError
+	35, // 45: ResShop.list:type_name -> ShopItem
+	46, // [46:46] is the sub-list for method output_type
+	46, // [46:46] is the sub-list for method input_type
+	46, // [46:46] is the sub-list for extension type_name
+	46, // [46:46] is the sub-list for extension extendee
+	0,  // [0:46] is the sub-list for field type_name
 }
 
 func init() { file_common_proto_init() }
@@ -2583,7 +2631,7 @@ func file_common_proto_init() {
 			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
 			RawDescriptor: unsafe.Slice(unsafe.StringData(file_common_proto_rawDesc), len(file_common_proto_rawDesc)),
 			NumEnums:      7,
-			NumMessages:   31,
+			NumMessages:   32,
 			NumExtensions: 0,
 			NumServices:   0,
 		},

+ 1 - 0
src/server/msg/msg.go

@@ -32,6 +32,7 @@ func init() {
 	Processor.Register(&ReqHeartBeat{})
 	Processor.Register(&SendColorSz{})
 	Processor.Register(&SendRoleMove{})
+	Processor.Register(&SendQuitRoom{})
 	Processor.Register(&NotifyPlayerSzNumber{})
 	Processor.Register(&NotifyPlayerMove{})
 	Processor.Register(&NotifyPlayerOpt{})