コード例 #1
0
        protected void C2L_CreateRoom(IIncommingMessage reader)
        {
            var msg  = reader.Parse <Msg_C2L_CreateRoom>();
            var user = reader.Peer.GetExtension <User>();

            if (user?.Room != null)
            {
                reader.Respond(1, EResponseStatus.Failed);
                return;
            }

            Debug.Log("AddRoom " + msg);
            var room = AddRoom(user, msg.Name, msg.MapId, msg.MaxPlayerCount);

            reader.Respond(EMsgSC.L2C_CreateRoomResult, new Msg_L2C_CreateRoom()
            {
                Info        = room.Info,
                PlayerInfos = room.RoomPlayerInfos
            });
            //TODO 缓存信息 批量发送
            if (_gameType2Rooms.TryGetValue(user.GameType, out var rooms))
            {
                var bytes = new Msg_L2C_RoomInfoUpdate()
                {
                    AddInfo = new RoomInfo[] { room.Info }
                }.ToBytes();
                //var bMsg = MessageHelper.Create((short) EMsgSC.L2C_RoomInfoUpdate,);
                foreach (var tRoom in rooms)
                {
                    tRoom.BorderMessage((short)EMsgSC.L2C_RoomInfoUpdate, bytes);
                }
            }
        }
コード例 #2
0
        protected void C2L_LeaveRoom(IIncommingMessage reader)
        {
            var msg  = reader.Parse <Msg_C2L_LeaveRoom>();
            var user = reader.Peer.GetExtension <User>();

            if (user?.Room == null)
            {
                return;
            }

            var room = user.Room;

            room.RemoveUser(user);
            if (room.IsEmpty)
            {
                var roomId = user.Room.RoomId;
                //TODO 缓存
                if (_gameType2Rooms.TryGetValue(user.GameType, out var rooms))
                {
                    //var bMsg = MessageHelper.Create((short) EMsgSC.L2C_RoomInfoUpdate,
                    //    new Msg_L2C_RoomInfoUpdate() {
                    //        DeleteInfo = new[] {roomId}
                    //    }.ToBytes());

                    //foreach (var tRoom in rooms) {
                    //    tRoom.BorderMessage(bMsg);
                    //}
                    var bytes = new Msg_L2C_RoomInfoUpdate()
                    {
                        DeleteInfo = new[] { roomId }
                    }.ToBytes();
                    //var bMsg = MessageHelper.Create((short) EMsgSC.L2C_RoomInfoUpdate,);
                    foreach (var tRoom in rooms)
                    {
                        tRoom.BorderMessage((short)EMsgSC.L2C_RoomInfoUpdate, bytes);
                    }
                }

                RemoveRoom(user.Room);
                reader.Respond((int)ERoomOperatorResult.Succ, EResponseStatus.Success);
                user.Room = null;
                return;
            }

            if (room.Owner == user)
            {
                room.Owner = room.Users[0];
            }

            user.Room = null;
            reader.Respond((int)ERoomOperatorResult.Succ, EResponseStatus.Success);
            room.BorderMessage((short)EMsgSC.L2C_LeaveRoom, new Msg_L2C_LeaveRoom()
            {
                UserId = user.UserId
            });
        }