Changed streams to byte[]'s with new streams
This commit is contained in:
parent
34db81f143
commit
a0af5286f8
@ -16,13 +16,20 @@ using System.Windows.Shapes;
|
|||||||
|
|
||||||
namespace RBG_Server.WPF
|
namespace RBG_Server.WPF
|
||||||
{
|
{
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Interaction logic for MainWindow.xaml
|
/// Interaction logic for MainWindow.xaml
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public partial class MainWindow : Window
|
public partial class MainWindow : Window
|
||||||
{
|
{
|
||||||
|
// Global Styles etc
|
||||||
|
private static readonly SolidColorBrush borderBrush = new(Color.FromRgb(255, 0, 0));
|
||||||
|
|
||||||
|
|
||||||
GameServer gameServer;
|
GameServer gameServer;
|
||||||
MemoryStream gameBoard;
|
// Game board bytes
|
||||||
|
byte[] gameBoard;
|
||||||
|
|
||||||
public MainWindow()
|
public MainWindow()
|
||||||
{
|
{
|
||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
@ -59,12 +66,13 @@ namespace RBG_Server.WPF
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
using FileStream fs = File.OpenRead(ImageSourceTextBox.Text);
|
using FileStream fs = File.OpenRead(ImageSourceTextBox.Text);
|
||||||
gameBoard = new();
|
using MemoryStream ms = new();
|
||||||
fs.CopyTo(gameBoard); // Load into memory, so the server can also utilise the stream
|
fs.CopyTo(ms); // Load into memory, so the server can also utilise the stream
|
||||||
|
gameBoard = ms.ToArray();
|
||||||
|
|
||||||
BitmapImage gameBoardImage = new();
|
BitmapImage gameBoardImage = new();
|
||||||
gameBoardImage.BeginInit();
|
gameBoardImage.BeginInit();
|
||||||
gameBoardImage.StreamSource = gameBoard;
|
gameBoardImage.StreamSource = new MemoryStream(gameBoard, false);
|
||||||
//gameBoardImage.CacheOption = BitmapCacheOption.OnLoad; // Must preload the image into memory, before it is unloaded
|
//gameBoardImage.CacheOption = BitmapCacheOption.OnLoad; // Must preload the image into memory, before it is unloaded
|
||||||
gameBoardImage.EndInit();
|
gameBoardImage.EndInit();
|
||||||
PreviewImage.Source = gameBoardImage;
|
PreviewImage.Source = gameBoardImage;
|
||||||
@ -107,10 +115,12 @@ namespace RBG_Server.WPF
|
|||||||
RedrawGrid();
|
RedrawGrid();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// Draws the overlay grid, clearing existing elements if necessary
|
||||||
|
/// </summary>
|
||||||
private void RedrawGrid()
|
private void RedrawGrid()
|
||||||
{
|
{
|
||||||
SolidColorBrush borderBrush = new(Color.FromRgb(255, 0, 0));
|
|
||||||
PreviewImageOverlay.RowDefinitions.Clear();
|
PreviewImageOverlay.RowDefinitions.Clear();
|
||||||
PreviewImageOverlay.ColumnDefinitions.Clear();
|
PreviewImageOverlay.ColumnDefinitions.Clear();
|
||||||
PreviewImageOverlay.Children.Clear();
|
PreviewImageOverlay.Children.Clear();
|
||||||
@ -149,7 +159,6 @@ namespace RBG_Server.WPF
|
|||||||
Grid.SetColumn(border, u);
|
Grid.SetColumn(border, u);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -184,6 +193,7 @@ namespace RBG_Server.WPF
|
|||||||
Grid.SetRow(cells[i], i / PreviewImageOverlay.ColumnDefinitions.Count);
|
Grid.SetRow(cells[i], i / PreviewImageOverlay.ColumnDefinitions.Count);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Represents a cell on the board; as a grid
|
/// Represents a cell on the board; as a grid
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@ -238,19 +248,6 @@ namespace RBG_Server.WPF
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void GenerateNewGameBoard(List<Player> players)
|
|
||||||
{
|
|
||||||
SolidColorBrush buttonBrush = new(Color.FromArgb(1, 255, 255, 255));
|
|
||||||
Grid[] cells = new Grid[PreviewImageOverlay.RowDefinitions.Count * PreviewImageOverlay.ColumnDefinitions.Count];
|
|
||||||
List<Player> unaddedPlayers = players;
|
|
||||||
for (int i = 0; i < cells.Length; i++)
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
private void Sliders_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
|
private void Sliders_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
|
||||||
{
|
{
|
||||||
if (IsInitialized)
|
if (IsInitialized)
|
||||||
@ -288,7 +285,7 @@ namespace RBG_Server.WPF
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
AnimatedBitmapImage animatedBitmap = new(new MemoryStream(loadedSprites[key]), p.PlayerSprite, Application.Current.Dispatcher);
|
AnimatedBitmapImage animatedBitmap = new(new MemoryStream(loadedSprites[key], false), p.PlayerSprite, Application.Current.Dispatcher);
|
||||||
}
|
}
|
||||||
catch
|
catch
|
||||||
{
|
{
|
||||||
@ -298,7 +295,7 @@ namespace RBG_Server.WPF
|
|||||||
BitmapImage src = new();
|
BitmapImage src = new();
|
||||||
src.BeginInit();
|
src.BeginInit();
|
||||||
|
|
||||||
src.StreamSource = new MemoryStream(loadedSprites[key]);
|
src.StreamSource = new MemoryStream(loadedSprites[key],false);
|
||||||
src.EndInit();
|
src.EndInit();
|
||||||
pSprite = src;
|
pSprite = src;
|
||||||
}
|
}
|
||||||
@ -318,7 +315,7 @@ namespace RBG_Server.WPF
|
|||||||
// Scope & create the base data for pSprite
|
// Scope & create the base data for pSprite
|
||||||
BitmapImage src = new();
|
BitmapImage src = new();
|
||||||
src.BeginInit();
|
src.BeginInit();
|
||||||
src.StreamSource = new MemoryStream(loadedSprites[key]);
|
src.StreamSource = new MemoryStream(loadedSprites[key], false);
|
||||||
src.EndInit();
|
src.EndInit();
|
||||||
pSprite = src;
|
pSprite = src;
|
||||||
}
|
}
|
||||||
@ -395,7 +392,7 @@ namespace RBG_Server.WPF
|
|||||||
_ = LoadedSprites.Children.Add(gifMedia);
|
_ = LoadedSprites.Children.Add(gifMedia);
|
||||||
*/
|
*/
|
||||||
Image spriteImage = new();
|
Image spriteImage = new();
|
||||||
RBG.Helpers.AnimatedBitmapImage animatedBitmap = new(new MemoryStream(item.Value), spriteImage, Application.Current.Dispatcher);
|
RBG.Helpers.AnimatedBitmapImage animatedBitmap = new(new MemoryStream(item.Value, false), spriteImage, Application.Current.Dispatcher);
|
||||||
_ = LoadedSprites.Children.Add(spriteImage);
|
_ = LoadedSprites.Children.Add(spriteImage);
|
||||||
}
|
}
|
||||||
catch
|
catch
|
||||||
@ -403,7 +400,7 @@ namespace RBG_Server.WPF
|
|||||||
// On failed, use the cached data
|
// On failed, use the cached data
|
||||||
BitmapImage image = new();
|
BitmapImage image = new();
|
||||||
image.BeginInit();
|
image.BeginInit();
|
||||||
image.StreamSource = new MemoryStream(item.Value);
|
image.StreamSource = new MemoryStream(item.Value, false);
|
||||||
image.EndInit();
|
image.EndInit();
|
||||||
Image spriteImage = new()
|
Image spriteImage = new()
|
||||||
{
|
{
|
||||||
@ -418,7 +415,7 @@ namespace RBG_Server.WPF
|
|||||||
|
|
||||||
BitmapImage image = new();
|
BitmapImage image = new();
|
||||||
image.BeginInit();
|
image.BeginInit();
|
||||||
image.StreamSource = new MemoryStream(item.Value);
|
image.StreamSource = new MemoryStream(item.Value, false);
|
||||||
image.EndInit();
|
image.EndInit();
|
||||||
Image spriteImage = new()
|
Image spriteImage = new()
|
||||||
{
|
{
|
||||||
|
@ -27,7 +27,7 @@ namespace RBG_Server
|
|||||||
/// <param name="startRow">The starting row of the board</param>
|
/// <param name="startRow">The starting row of the board</param>
|
||||||
/// <param name="startColumn">The starting column of the board</param>
|
/// <param name="startColumn">The starting column of the board</param>
|
||||||
/// <param name="boardImage">The full-scale board image</param>
|
/// <param name="boardImage">The full-scale board image</param>
|
||||||
public GameServer(byte startRow, byte startColumn, byte rowSize, byte columnSize, byte zoomRow, byte zoomCol, byte zoomRowSpan, byte zoomColSpan, Stream boardImage)
|
public GameServer(byte startRow, byte startColumn, byte rowSize, byte columnSize, byte zoomRow, byte zoomCol, byte zoomRowSpan, byte zoomColSpan, byte[] boardImage)
|
||||||
{
|
{
|
||||||
this.startRow = startRow;
|
this.startRow = startRow;
|
||||||
this.startColumn = startColumn;
|
this.startColumn = startColumn;
|
||||||
@ -38,7 +38,7 @@ namespace RBG_Server
|
|||||||
this.zoomRowSpan = zoomRowSpan;
|
this.zoomRowSpan = zoomRowSpan;
|
||||||
this.zoomColSpan = zoomColSpan;
|
this.zoomColSpan = zoomColSpan;
|
||||||
BitmapImage gameBoardImage = new();
|
BitmapImage gameBoardImage = new();
|
||||||
gameBoardImage.StreamSource = boardImage;
|
gameBoardImage.StreamSource = new MemoryStream(boardImage, false);
|
||||||
// Hold images
|
// Hold images
|
||||||
Dictionary<int, byte[]> sourceImages = new();
|
Dictionary<int, byte[]> sourceImages = new();
|
||||||
// Create a JPEG encoder
|
// Create a JPEG encoder
|
||||||
|
@ -11,11 +11,12 @@ namespace RBG_Server
|
|||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Data class containing information about a player. Drawn directly to the screen, hence the inheritance
|
/// Data class containing information about a player. Drawn directly to the screen, hence the inheritance
|
||||||
/// of Image, which allows this entire object to be
|
/// of Grid, which allows this entire object to be used in the display
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public class Player : Grid
|
public class Player : Grid
|
||||||
{
|
{
|
||||||
static GradientStopCollection gradientStops = new(5)
|
// Gradient that denotes the background of the player sprite
|
||||||
|
private static readonly GradientStopCollection gradientStops = new(5)
|
||||||
{
|
{
|
||||||
new GradientStop(Color.FromArgb(255, 0, 255, 255), 0),
|
new GradientStop(Color.FromArgb(255, 0, 255, 255), 0),
|
||||||
new GradientStop(Color.FromArgb(192, 0, 255, 255), 0.75),
|
new GradientStop(Color.FromArgb(192, 0, 255, 255), 0.75),
|
||||||
@ -23,7 +24,7 @@ namespace RBG_Server
|
|||||||
new GradientStop(Color.FromArgb(32, 0, 255, 255), 0.95),
|
new GradientStop(Color.FromArgb(32, 0, 255, 255), 0.95),
|
||||||
new GradientStop(Color.FromArgb(0, 0, 255, 255), 1)
|
new GradientStop(Color.FromArgb(0, 0, 255, 255), 1)
|
||||||
};
|
};
|
||||||
static RadialGradientBrush shadowBrush = new(gradientStops);
|
private static readonly RadialGradientBrush shadowBrush = new(gradientStops);
|
||||||
|
|
||||||
// C# uses implicit field definitions; i.e. declaring a property creates an implicit private field
|
// C# uses implicit field definitions; i.e. declaring a property creates an implicit private field
|
||||||
// Note that it is also possible to assign values, and specify access modifiers for the get & set independantly
|
// Note that it is also possible to assign values, and specify access modifiers for the get & set independantly
|
||||||
@ -35,7 +36,7 @@ namespace RBG_Server
|
|||||||
public byte[] UnhandledBuffer { get; set; }
|
public byte[] UnhandledBuffer { get; set; }
|
||||||
|
|
||||||
public Image PlayerSprite { get; set; } = new();
|
public Image PlayerSprite { get; set; } = new();
|
||||||
private Rectangle spriteShadow = new();
|
private readonly Rectangle spriteShadow = new();
|
||||||
|
|
||||||
private int processing;
|
private int processing;
|
||||||
|
|
||||||
@ -51,7 +52,7 @@ namespace RBG_Server
|
|||||||
|
|
||||||
// public Image sprite; // Sprite is now set as the implementation of this class
|
// public Image sprite; // Sprite is now set as the implementation of this class
|
||||||
|
|
||||||
public Player(string name, int row, int column) : base() // Call the base constructor at the same time
|
public Player(string name, int row, int column) : base() // Call the base constructor at the same time; inits a Grid()
|
||||||
{
|
{
|
||||||
PlayerName = name;
|
PlayerName = name;
|
||||||
Row = row;
|
Row = row;
|
||||||
@ -61,16 +62,21 @@ namespace RBG_Server
|
|||||||
UnhandledBuffer = Array.Empty<byte>();
|
UnhandledBuffer = Array.Empty<byte>();
|
||||||
|
|
||||||
spriteShadow.Fill = shadowBrush;
|
spriteShadow.Fill = shadowBrush;
|
||||||
Children.Add(spriteShadow);
|
_ = Children.Add(spriteShadow);
|
||||||
Children.Add(PlayerSprite);
|
_ = Children.Add(PlayerSprite);
|
||||||
}
|
}
|
||||||
|
|
||||||
public new bool Equals(object obj)
|
public new bool Equals(object obj)
|
||||||
{
|
{
|
||||||
return (obj as Player).GetHashCode() == GetHashCode();
|
return (obj as Player).GetHashCode() == GetHashCode();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// TODO:
|
||||||
|
/// Replace this with something that is connection-agnostic
|
||||||
|
/// I.e. the combo of name, position, linked sprite etc. should
|
||||||
|
/// allow us to reconnect disconnected players
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
public new int GetHashCode()
|
public new int GetHashCode()
|
||||||
{
|
{
|
||||||
int res = (base.GetHashCode() + PlayerName.GetHashCode()) >> 8; // Right-shift the original hashcode by one byte & use our row & column
|
int res = (base.GetHashCode() + PlayerName.GetHashCode()) >> 8; // Right-shift the original hashcode by one byte & use our row & column
|
||||||
|
Loading…
x
Reference in New Issue
Block a user