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