mirror of
https://github.com/sbrl/Nibriboard.git
synced 2018-01-10 21:33:49 +00:00
[server] Add line incubator and start writing line part handler
This commit is contained in:
parent
a8c1b8e99c
commit
62857c1004
3 changed files with 75 additions and 1 deletions
62
Nibriboard/Client/LineIncubator.cs
Normal file
62
Nibriboard/Client/LineIncubator.cs
Normal file
|
@ -0,0 +1,62 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using Nibriboard.RippleSpace;
|
||||||
|
using SBRL.Utilities;
|
||||||
|
|
||||||
|
namespace Nibriboard.Client
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Manages the construction of lines that the clients are drawing bit by bit.
|
||||||
|
/// </summary>
|
||||||
|
public class LineIncubator
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// The current lines that haven't been completed yet.
|
||||||
|
/// </summary>
|
||||||
|
private Dictionary<Guid, DrawnLine> currentLines = new Dictionary<Guid, DrawnLine>();
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// The number of lines that this line incubator has completed.
|
||||||
|
/// </summary>
|
||||||
|
public int LinesCompleted { get; private set; } = 0;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// The number of liens that are still incubating and haven't been completed yet.
|
||||||
|
/// </summary>
|
||||||
|
public int IncompletedLines {
|
||||||
|
get {
|
||||||
|
return currentLines.Count;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public LineIncubator()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public void AddBit(Guid lineId, List<LocationReference> points)
|
||||||
|
{
|
||||||
|
// Create a new line if one doesn't exist already
|
||||||
|
if(!currentLines.ContainsKey(lineId))
|
||||||
|
currentLines.Add(lineId, new DrawnLine());
|
||||||
|
|
||||||
|
// Add these points to the line
|
||||||
|
currentLines[lineId].Points.AddRange(points);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Mark a line as complete and remove it from the incubator.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="lineId">The id of the line to complete.</param>
|
||||||
|
/// <returns>The completed line.</returns>
|
||||||
|
public DrawnLine CompleteLine(Guid lineId)
|
||||||
|
{
|
||||||
|
if(!currentLines.ContainsKey(lineId))
|
||||||
|
throw new KeyNotFoundException("Error: A line with that id wasn't found in this LineIncubator.");
|
||||||
|
|
||||||
|
DrawnLine completedLine = currentLines[lineId];
|
||||||
|
currentLines.Remove(lineId);
|
||||||
|
|
||||||
|
return completedLine;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -54,7 +54,8 @@ namespace Nibriboard.Client
|
||||||
["HandshakeRequest"] = typeof(HandshakeRequestMessage),
|
["HandshakeRequest"] = typeof(HandshakeRequestMessage),
|
||||||
["CursorPosition"] = typeof(CursorPositionMessage),
|
["CursorPosition"] = typeof(CursorPositionMessage),
|
||||||
["PlaneChange"] = typeof(PlaneChangeMessage),
|
["PlaneChange"] = typeof(PlaneChangeMessage),
|
||||||
["ChunkUpdateRequest"] = typeof(ChunkUpdateRequestMessage)
|
["ChunkUpdateRequest"] = typeof(ChunkUpdateRequestMessage),
|
||||||
|
["LinePartMessage"] = typeof(LinePartMessage)
|
||||||
};
|
};
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -326,6 +327,16 @@ namespace Nibriboard.Client
|
||||||
return Task.CompletedTask;
|
return Task.CompletedTask;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected Task handleLinePartMessage(LinePartMessage message)
|
||||||
|
{
|
||||||
|
// Forward the line part to everyone on this plane
|
||||||
|
manager.BroadcastPlane(this, message);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
return Task.CompletedTask;
|
||||||
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -96,6 +96,7 @@
|
||||||
<Compile Include="Client\Messages\ChunkUpdateRequestMessage.cs" />
|
<Compile Include="Client\Messages\ChunkUpdateRequestMessage.cs" />
|
||||||
<Compile Include="Client\ChunkCache.cs" />
|
<Compile Include="Client\ChunkCache.cs" />
|
||||||
<Compile Include="Client\Messages\LinePartMessage.cs" />
|
<Compile Include="Client\Messages\LinePartMessage.cs" />
|
||||||
|
<Compile Include="Client\LineIncubator.cs" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<EmbeddedResource Include="ClientFiles\index.html" />
|
<EmbeddedResource Include="ClientFiles\index.html" />
|
||||||
|
|
Loading…
Reference in a new issue