Example #1
0
 /// <summary>Removes a game box from this library.</summary>
 /// <param name="gameBoxReference">A game box reference.</param>
 public void RemoveReference(IGameBoxReference gameBoxReference)
 {
     Debug.Assert(gameBoxReference.Name != null);
     if (gameBoxReference != defaultGameBox)
     {
         removeReference(gameBoxReference);
         updateLibraryFile();
     }
 }
Example #2
0
 private void openButton_Click(object sender, EventArgs e)
 {
     if (listView.SelectedItems.Count == 1)
     {
         IGameBoxReference reference = (IGameBoxReference)listView.SelectedItems[0].Tag;
         Close();
         controller.ExecuteCommand("open " + reference.FileName);
     }
 }
Example #3
0
        public sealed override void Handle(Controller controller)
        {
            IModel model = controller.Model;

            if (!model.IsHosting)
            {
                string gameBoxName;
                byte[] gameBoxHash;
                using (MemoryStream stream = new MemoryStream(gameData, false)) {
                    using (InflaterInputStream compressionStream = new InflaterInputStream(stream)) {
                        model.RetrieveGameBoxInfoFromGameData(compressionStream, out gameBoxName, out gameBoxHash);
                    }
                }

                IGameBoxReference gameBoxReference = model.GameLibrary.FindGameBox(gameBoxHash);
                if (gameBoxReference == null)
                {
                    model.ClearTransientState();
                    model.IsHosting = true;
                    model.RemoveAllPlayers();
                    controller.Model.NetworkClient.Disconnect();
                    controller.View.Prompter.AddTextToHistory(0xFFFF0000, Resources.YouHaveBeenDisconnectedGameBoxNotFound, gameBoxName);
                    model.AudioManager.PlayAudioFile("Disconnect.wma");
                }
                else
                {
                    model.ClearTransientState();
                    model.StateChangeSequenceNumber = stateChangeSequenceNumber;
                    try {
                        model.OpenGameBox(gameBoxReference);
                        using (MemoryStream stream = new MemoryStream(gameData, false)) {
                            using (InflaterInputStream compressionStream = new InflaterInputStream(stream)) {
                                model.CurrentGameBox.OpenGame(compressionStream);
                            }
                        }
                    } catch (Exception e) {
                        model.OpenGameBox(model.GameLibrary.DefaultGameBox);
                        model.CurrentGameBox.OpenBuiltInScenario(model.CurrentGameBox.StartupScenarioFileName);

                        model.IsHosting = true;
                        model.RemoveAllPlayers();
                        controller.Model.NetworkClient.Disconnect();
                        controller.View.Prompter.AddTextToHistory(0xFFFF0000, Resources.YouHaveBeenDisconnectedGameBoxNotFound, gameBoxName);
                        model.AudioManager.PlayAudioFile("Disconnect.wma");

                        string message = string.Format(Resources.CommandError, e.GetType().Name, e.Message);
                        controller.View.Prompter.AddTextToHistory(0xFFFF0000, message);
                        controller.DialogState.Dialog = new MessageDialog(SystemIcons.Error, message);
                        controller.State = controller.DialogState;
                        controller.View.ShowDialog(controller.DialogState.Dialog);
                    } finally {
                        controller.View.ResetGraphicsElements();
                    }
                }
            }
        }
Example #4
0
        private void openGameOrScenario(string fileName, bool isScenario)
        {
            IModel model = controller.Model;

            string gameBoxName;

            byte[] gameBoxHash;
            using (Stream stream = File.OpenRead(fileName)) {
                model.RetrieveGameBoxInfoFromGameData(stream, out gameBoxName, out gameBoxHash);
            }

            IGameBoxReference gameBoxReference = model.GameLibrary.FindGameBox(gameBoxHash);

            if (gameBoxReference == null)
            {
                controller.View.Prompter.AddTextToHistory(0xFFFF0000, Resources.UnableToOpenGame, gameBoxName);
            }
            else
            {
                model.ClearTransientState();
                model.OpenGameBox(gameBoxReference.FileName);
                try {
                    using (Stream stream = File.OpenRead(fileName)) {
                        if (isScenario)
                        {
                            model.CurrentGameBox.OpenScenarioFromScenarioFile(fileName);
                        }
                        else
                        {
                            model.CurrentGameBox.OpenGame(fileName);
                        }
                    }
                } catch {
                    model.OpenGameBox(model.GameLibrary.DefaultGameBox);
                    model.CurrentGameBox.OpenBuiltInScenario(model.CurrentGameBox.StartupScenarioFileName);
                    throw;
                } finally {
                    byte[] gameData;
                    using (MemoryStream stream = new MemoryStream()) {
                        using (DeflaterOutputStream compressionStream = new DeflaterOutputStream(stream)) {
                            model.CurrentGameBox.CurrentGame.Save(compressionStream, false);
                            compressionStream.Flush();
                        }
                        stream.Flush();
                        gameData = stream.ToArray();
                    }
                    ++model.StateChangeSequenceNumber;
                    controller.NetworkClient.Send(new GameLoadedMessage(model.StateChangeSequenceNumber, gameData));
                    controller.View.ResetGraphicsElements();
                }
            }
        }
Example #5
0
        /// <summary>Removes a game box from this library without updating the file.</summary>
        /// <param name="gameBoxReference">A game box reference.</param>
        private void removeReference(IGameBoxReference gameBoxReference)
        {
            List <GameBoxReference> referenceList;

            if (gameBoxes.TryGetValue(gameBoxReference.Name.ToUpper(), out referenceList))
            {
                for (int i = 0; i < referenceList.Count; ++i)
                {
                    if (GameBoxReference.HashAreIdentical(referenceList[i].Hash, gameBoxReference.Hash))
                    {
                        referenceList.RemoveAt(i);
                        break;
                    }
                }
            }
        }
Example #6
0
 private void removeButton_Click(object sender, EventArgs e)
 {
     if (listView.SelectedItems.Count > 0)
     {
         openButton.Enabled   = false;
         removeButton.Enabled = false;
         foreach (ListViewItem selectedItem in listView.SelectedItems)
         {
             IGameBoxReference reference = (IGameBoxReference)selectedItem.Tag;
             controller.Model.GameLibrary.RemoveReference(reference);
         }
         smallImageList.Images.Clear();
         largeImageList.Images.Clear();
         listView.Items.Clear();
         buildList();
     }
 }
Example #7
0
 /// <summary>Adds a game box reference to this library.</summary>
 /// <param name="gameBoxReference">A game box reference.</param>
 public void AddReference(IGameBoxReference gameBoxReference)
 {
     Debug.Assert(gameBoxReference.Name != null);
     if (gameBoxReference != defaultGameBox)
     {
         string name = gameBoxReference.Name.ToUpper();
         List <GameBoxReference> referenceList;
         if (!gameBoxes.TryGetValue(name, out referenceList))
         {
             referenceList = new List <GameBoxReference>(1);
             gameBoxes.Add(name, referenceList);
         }
         else
         {
             foreach (GameBoxReference reference in referenceList)
             {
                 if (GameBoxReference.HashAreIdentical(reference.Hash, gameBoxReference.Hash))
                 {
                     // update file path?
                     if (reference.FileName != gameBoxReference.FileName)
                     {
                         removeReference(reference);
                         break;
                     }
                     else
                     {
                         return;
                     }
                 }
             }
         }
         // remove other references pointing to the same file path (at most one normally)
         foreach (IGameBoxReference otherReference in GameBoxes)
         {
             if (otherReference.FileName == gameBoxReference.FileName)
             {
                 removeReference(otherReference);
                 break;
             }
         }
         referenceList.Add((GameBoxReference)gameBoxReference);
         updateLibraryFile();
     }
 }
Example #8
0
        private void parseCommand_openbox(string parameters)
        {
            Regex parametersRegex = new Regex(@"^(?<1>.*\S)\s*$", RegexOptions.Singleline);
            Match parametersMatch = parametersRegex.Match(parameters);

            if (parametersMatch.Success)
            {
                IModel model = controller.Model;
                if (!model.IsHosting)
                {
                    controller.View.Prompter.AddTextToHistory(0xFFFF0000, Resources.NotHosting);
                }
                else
                {
                    string boxName = parametersMatch.Groups[1].Value;
                    if (model.CurrentGameBox.Reference.Name.ToUpper() != boxName.ToUpper())
                    {
                        IGameBoxReference gameBoxReference = model.GameLibrary.FindGameBox(boxName);
                        if (gameBoxReference == null)
                        {
                            controller.View.Prompter.AddTextToHistory(0xFFFF0000, Resources.GameBoxNotFound, boxName);
                        }
                        else
                        {
                            ++model.StateChangeSequenceNumber;
                            controller.NetworkClient.Send(new GameBoxHasChangedMessage(model.StateChangeSequenceNumber, gameBoxReference.Name, gameBoxReference.Hash));
                        }
                    }
                    else
                    {
                        controller.View.Prompter.AddTextToHistory(0xFFFF0000, Resources.GameBoxAlreadyOpened, boxName);
                    }
                }
            }
            else
            {
                controller.View.Prompter.AddTextToHistory(0xFFFF0000, Resources.InvalidParameters, "openbox", "openbox <box_name>");
            }
        }
Example #9
0
        public sealed override void Handle(Controller controller)
        {
            IModel model = controller.Model;

            string gameBoxName;

            byte[] gameBoxHash;
            using (MemoryStream stream = new MemoryStream(gameData, false)) {
                using (InflaterInputStream compressionStream = new InflaterInputStream(stream)) {
                    model.RetrieveGameBoxInfoFromGameData(compressionStream, out gameBoxName, out gameBoxHash);
                }
            }

            IGameBoxReference gameBoxReference = model.GameLibrary.FindGameBox(gameBoxHash);

            if (gameBoxReference == null)
            {
                model.ClearTransientState();
                model.IsHosting = true;
                model.RemoveAllPlayers();
                controller.Model.NetworkClient.Disconnect();
                controller.View.Prompter.AddTextToHistory(0xFFFF0000, Resources.UnableToConnectGameBoxNotFound, gameBoxName);
                model.AudioManager.PlayAudioFile("Disconnect.wma");
                return;
            }
            else
            {
                model.ClearTransientState();
                model.RemoveAllPlayers();
                model.StateChangeSequenceNumber = stateChangeSequenceNumber;
                try {
                    model.OpenGameBox(gameBoxReference);
                    using (MemoryStream stream = new MemoryStream(gameData, false)) {
                        using (InflaterInputStream compressionStream = new InflaterInputStream(stream)) {
                            model.CurrentGameBox.OpenGame(compressionStream);
                        }
                    }

                    if (!selection.IsEmpty)
                    {
                        IGame      game         = model.CurrentGameBox.CurrentGame;
                        IStack     stack        = game.GetStackById(selection.StackId);
                        ISelection newSelection = stack.Select().RemoveAllPieces();
                        foreach (int pieceId in selection.PieceIds)
                        {
                            IPiece piece = game.GetPieceById(pieceId);
                            newSelection = newSelection.AddPiece(piece);
                        }
                        model.CurrentSelection = newSelection;
                    }

                    foreach (ConnectionAcceptedMessage.PlayerInfo player in currentPlayers)
                    {
                        model.AddPlayer(player.Id, player.FirstName, player.LastName, player.Guid, player.Color,
                                        Point.Truncate(controller.View.ConvertModelToScreenCoordinates(player.CursorPosition)),
                                        player.IsCursorVisible);
                        // is this player already connected with another instance?
                        if (player.Guid == model.ThisPlayer.Guid)
                        {
                            model.ThisPlayer.Guid = Guid.Empty;                                 // this is to prevent the sharing of a hand
                        }
                    }

                    DisplayProperties properties = controller.View.DisplayProperties;
                    if (widescreen != (properties.GameAspectRatio == AspectRatioType.SixteenToTen))
                    {
                        properties.GameAspectRatio        = (widescreen ? AspectRatioType.SixteenToTen : AspectRatioType.FourToThree);
                        controller.View.DisplayProperties = properties;
                    }

                    controller.View.ResetGraphicsElements();

                    controller.NetworkClient.Send(new PlayerHasJoinedMessage(
                                                      model.ThisPlayer.FirstName, model.ThisPlayer.LastName, model.ThisPlayer.Guid, controller.View.ConvertScreenToModelCoordinates(controller.MainForm.PointToClient(Cursor.Position)), model.ThisPlayer.IsCursorVisible));

                    if (System.Environment.OSVersion.Version.Major >= 6)                        // running Vista?
                    {
                        controller.DialogState.Dialog = new MessageDialog(SystemIcons.Warning, Resources.VistaWarningNoVoice);
                        controller.State = controller.DialogState;
                        controller.View.ShowDialog(controller.DialogState.Dialog);
                    }
                } catch (Exception e) {
                    model.OpenGameBox(model.GameLibrary.DefaultGameBox);
                    model.CurrentGameBox.OpenBuiltInScenario(model.CurrentGameBox.StartupScenarioFileName);

                    model.IsHosting = true;
                    model.RemoveAllPlayers();
                    controller.Model.NetworkClient.Disconnect();
                    controller.View.Prompter.AddTextToHistory(0xFFFF0000, Resources.UnableToConnectGameBoxNotFound, gameBoxName);
                    model.AudioManager.PlayAudioFile("Disconnect.wma");

                    string message = string.Format(Resources.CommandError, e.GetType().Name, e.Message);
                    controller.View.Prompter.AddTextToHistory(0xFFFF0000, message);
                    controller.DialogState.Dialog = new MessageDialog(SystemIcons.Error, message);
                    controller.State = controller.DialogState;
                    controller.View.ShowDialog(controller.DialogState.Dialog);

                    controller.View.ResetGraphicsElements();
                }
            }
        }
Example #10
0
File: Model.cs Project: jimu/ZunTzu
 /// <summary>Opens a game box file.</summary>
 /// <param name="reference">Library reference of the game box.</param>
 public void OpenGameBox(IGameBoxReference reference)
 {
     Debug.Assert(currentSelection == null);
     currentGameBox = new GameBox((GameBoxReference)reference);
 }