示例#1
0
        public RoomModel CreateRoom(NewRoomModel newRoom)
        {
            const int TRIES   = 30;
            var       attempt = 0;
            var       room    = new DbRoom {
                Name = newRoom.Name
            };

            using var ctx = _contextFactory.CreateDbContext();
            ctx.Rooms.Add(room);

            while (true)
            {
                try
                {
                    lock (_random)
                    {
                        room.DisplayId = _random.Next(1, 10_000);
                    }

                    ctx.SaveChanges();
                    return(room.ToRoomModel());
                }
                catch (Exception e) when(attempt < TRIES)
                {
                    _logger.LogWarning(e, $"Failed to create room by display ID '{room.DisplayId}', attempt {attempt}/{TRIES}. Will try again, it may have just been due to ID collision.");
                }
                catch (Exception e)
                {
                    _logger.LogError(e, $"Failed to create room by display ID '{room.DisplayId}', attempt {attempt}/{TRIES}. Will not try again.");
                    throw;
                }
            }
        }
示例#2
0
        public Room Insert(CreateRoom value)
        {
            using (var tran = db.Database.BeginTransaction(System.Data.IsolationLevel.RepeatableRead))
            {
                var toInsert = new DbRoom()
                {
                    Capacity = value.Capacity
                };
                db.Rooms.Add(toInsert);

                db.SaveChanges();
                tran.Commit();

                return(new Model.Room(toInsert.Id, toInsert.Capacity));
            }
        }
示例#3
0
    public void exitRoom()
    {
        buttonSound.Play();
        DbRoom dbRoom = new DbRoom();
        Room   room   = dbRoom.getRoomInfo();

        if (isServer && players.Count > 1)
        {
            return;
        }



        DbPlayer   db   = new DbPlayer();
        PlayerData Info = db.GetPlayerByUserName(localPlayer.playerPanel.userNameText.text);

        Info.Money += localPlayer.money - 1000;
        db.UpdatePlayer(Info);
        RemovePlayer(localPlayer);
        room.amountOfPlayers--;
        dbRoom.UpdateRoom(room);



        if (isServer)
        {
            dbRoom.deleteRoom(room);
            NetworkManager.singleton.StopHost();
            RemovePlayer(localPlayer);
            //Destroy(LobbyScene.singleton.gameObject);
            NetworkManager.singleton.StopClient();
            Destroy(localPlayer);
            NetworkManager.Shutdown();
            //Debug.Log("after destroying the local player");
            return;
        }


        if (!isServer && isClient)
        {
            RemovePlayer(localPlayer);
            NetworkManager.singleton.StopClient();
            Destroy(localPlayer);
            return;
        }
    }//exit the room after saving the player new score in the data base to the lobby scene
示例#4
0
    void Awake()
    {
        dbRoom = new DbRoom();
        room   = dbRoom.getRoomInfo();

        if (room == null)
        {
            host.interactable        = true;
            host.enabled             = true;
            startClient.interactable = false;
        }
        else
        {
            host.interactable        = false;
            startClient.interactable = true;
            startClient.enabled      = true;
        }
    }
示例#5
0
    public void setButtons()
    {
        GameObject.Find("StartHost").GetComponent <Button>().onClick.AddListener(StartUpHost);
        GameObject.Find("StartClient").GetComponent <Button>().onClick.AddListener(StartUpClient);

        dbRoom = new DbRoom();
        room   = dbRoom.getRoomInfo();

        if (room == null)
        {
            GameObject.Find("StartHost").GetComponent <Button>().interactable   = true;
            GameObject.Find("StartClient").GetComponent <Button>().interactable = false;
        }
        else
        {
            GameObject.Find("StartHost").GetComponent <Button>().interactable   = false;
            GameObject.Find("StartClient").GetComponent <Button>().interactable = true;
        }
    }
示例#6
0
        public RemoveResult DeleteRoom(int roomId)
        {
            try
            {
                using var ctx = _contextFactory.CreateDbContext();
                var room = new DbRoom {
                    DisplayId = roomId
                };

                ctx.Attach(room);
                ctx.Remove(room);

                return(ctx.SaveChanges() > 0
                    ? RemoveResult.OK
                    : RemoveResult.AlreadyRemoved);
            }
            catch (Exception e)
            {
                _logger.LogError(e, $"Failed to remove room by ID '{roomId}' from database.");
                return(RemoveResult.UnableToRemove);
            }
        }
示例#7
0
 private static Model.Room ToModel(DbRoom value)
 {
     return(new Model.Room(value.Id, value.Capacity));
 }
示例#8
0
 public static RoomModel ToRoomModel(this DbRoom room)
 {
     return(new RoomModel(room.DisplayId, room.Name));
 }