Example #1
0
        /// <summary>
        /// Creates room based on current users input on room creation
        /// </summary>
        /// <param name="roomName"></param>
        /// <param name="desc"></param>
        /// <param name="passW"></param>
        public void CreateRoom(String roomName, String desc, String passW)
        {
            RoomModel room = new RoomModel();
            //create user guid
            RoomUserModel user = new RoomUserModel();

            user.UserGuid = Guid.NewGuid().ToString();
            //create random byte for admin key
            Random rnd = new Random();

            byte[] b = new byte[128];
            //convert byte to string for easier handling in javascript
            String convKey = Convert.ToBase64String(b);

            rnd.NextBytes(b);
            //where are the banned and current users being used?
            room.BannedUsers  = new ConcurrentDictionary <string, RoomUserModel>();
            room.CurrentUsers = new ConcurrentDictionary <string, RoomUserModel>();
            room.RoomName     = roomName;
            room.RoomGuid     = Guid.NewGuid().ToString();
            //need to create loop that checks if created roomguid already exists.
            while (CollaborationRooms.ContainsKey(room.RoomGuid))
            {
                room.RoomGuid = Guid.NewGuid().ToString();
            }
            //check room description
            if (!(String.IsNullOrEmpty(desc)))
            {
                room.RoomDescription = desc;
            }
            else
            {
                room.RoomDescription = "";
            }
            //check permissions to see if room is private or public
            if (String.IsNullOrEmpty(passW))
            {
                room.RoomPublic = true;
            }
            else
            {
                room.Password   = passW;
                room.RoomPublic = false;
            }
            //do we need another check before adding the room?
            CollaborationRooms.TryAdd(room.RoomGuid, room);
            //broadcast room guid, user guid, admin key

            Clients.Caller.broadcastCreateRoomResult(room.RoomGuid, user.UserGuid, convKey);
        }
Example #2
0
 /// <summary>
 /// Allows current user to join room
 /// </summary>
 /// <param name="roomGuid"></param>
 /// <param name="user"></param>
 public void JoinRoom(String roomGuid, RoomUserModel user)
 {
     if (CollaborationRooms.ContainsKey(roomGuid))
     {
         RoomModel room = CollaborationRooms[roomGuid];
         //Check if users exist or if they are banned
         if (!room.BannedUsers.ContainsKey(user.UserGuid))
         {
             room.CurrentUsers.TryAdd(user.UserGuid, user);
             Groups.Add(Context.ConnectionId, roomGuid);
             Clients.Group(roomGuid, Context.ConnectionId).addUserToList(user);
         }
     }
 }
Example #3
0
        /// <summary>
        /// 进入房间
        /// </summary>
        /// <param name="model">room model</param>
        /// <returns></returns>
        public JsonResult Join(RoomUserModel model)
        {
            var result = new ResponseResult();

            try
            {
                var user = PKBag.OnlineUserRecorder.GetUser(PKBag.LoginUser.UserName);

                if (user.RoomLevel == model.RoomLevel && user.DeskNo == model.DeskNo)
                {
                    //已经进入的房间
                }
                else
                {
                    var maxMembers  = 10;   //最多人数
                    var deskUsers   = PKBag.OnlineUserRecorder.GetUsers(model.RoomLevel, model.DeskNo);
                    var memberCount = deskUsers.Count();
                    if (memberCount == maxMembers)
                    {
                        result.Success = false;
                        result.Message = "房间已满";
                    }
                    else
                    {
                        user.RoomLevel = model.RoomLevel;
                        user.DeskNo    = model.DeskNo;

                        // 取最小的 还未在房间中 使用的车号
                        var motoNums = OnlineHttpModule.GetMinMotoNum(model.RoomLevel, model.DeskNo);
                        user.Num = motoNums;
                    }
                }
            }
            catch (Exception ex)
            {
                result.Success = false;
                result.Message = MessageConst.System_Error;

                _logger.Info(ex);
            }

            return(Json(result));
        }