/// <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); }
/// <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); } } }
/// <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)); }