mirror of
https://github.com/sbrl/Nibriboard.git
synced 2018-01-10 21:33:49 +00:00
[server] Fix ripplespace representation
This commit is contained in:
parent
b21608d261
commit
d79fdc8d04
5 changed files with 18 additions and 62 deletions
|
@ -410,8 +410,10 @@ namespace Nibriboard.Client
|
||||||
|
|
||||||
protected void handleChunkUpdateEvent(object sender, ChunkUpdateEventArgs eventArgs)
|
protected void handleChunkUpdateEvent(object sender, ChunkUpdateEventArgs eventArgs)
|
||||||
{
|
{
|
||||||
|
Chunk sendingChunk = sender as Chunk;
|
||||||
|
Log.WriteLine("[NibriClient#{0}] Sending chunk update for {1}", Id, sendingChunk.Location);
|
||||||
ChunkUpdateMessage clientNotification = new ChunkUpdateMessage() {
|
ChunkUpdateMessage clientNotification = new ChunkUpdateMessage() {
|
||||||
Chunks = new List<Chunk>() { sender as Chunk }
|
Chunks = new List<Chunk>() { sendingChunk }
|
||||||
};
|
};
|
||||||
Send(clientNotification);
|
Send(clientNotification);
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,7 +7,7 @@ window.panzoom = require("pan-zoom");
|
||||||
|
|
||||||
// Our files
|
// Our files
|
||||||
import RippleLink from './RippleLink';
|
import RippleLink from './RippleLink';
|
||||||
import ViewportSyncer from './ViewportSyncer';
|
import CursorSyncer from './CursorSyncer';
|
||||||
import OtherClient from './OtherClient';
|
import OtherClient from './OtherClient';
|
||||||
import Pencil from './Pencil';
|
import Pencil from './Pencil';
|
||||||
import { get } from './Utilities';
|
import { get } from './Utilities';
|
||||||
|
@ -166,7 +166,7 @@ class BoardWindow extends EventEmitter
|
||||||
}).bind(this))
|
}).bind(this))
|
||||||
|
|
||||||
// Keep the server up to date on our viewport and cursor position
|
// Keep the server up to date on our viewport and cursor position
|
||||||
this.viewportSyncer = new ViewportSyncer(this.rippleLink, this.cursorUpdateFrequency)
|
this.cursorSyncer = new CursorSyncer(this.rippleLink, this.cursorUpdateFrequency)
|
||||||
|
|
||||||
// RippleLink message bindings
|
// RippleLink message bindings
|
||||||
|
|
||||||
|
|
|
@ -1,56 +0,0 @@
|
||||||
"use strict";
|
|
||||||
|
|
||||||
class CursorSyncer
|
|
||||||
{
|
|
||||||
constructor(inRippleLink, syncFrequency)
|
|
||||||
{
|
|
||||||
// The ripple link we should send the cursor updates down
|
|
||||||
this.rippleLink = inRippleLink;
|
|
||||||
// The target frequency in fps at we should send sursor updates.
|
|
||||||
this.cursorUpdateFrequency = syncFrequency;
|
|
||||||
|
|
||||||
// Register ourselves to start sending cursor updates once the ripple
|
|
||||||
// link connects
|
|
||||||
this.rippleLink.on("connect", this.setup.bind(this));
|
|
||||||
}
|
|
||||||
|
|
||||||
setup()
|
|
||||||
{
|
|
||||||
// The last time we sent a cursor update to the server.
|
|
||||||
this.lastCursorUpdate = 0;
|
|
||||||
|
|
||||||
document.addEventListener("mousemove", (function(event) {
|
|
||||||
this.cursorPosition = {
|
|
||||||
X: event.clientX,
|
|
||||||
Y: event.clientY
|
|
||||||
};
|
|
||||||
|
|
||||||
setTimeout((function() {
|
|
||||||
// Throttle the cursor updates we send to the server - a high
|
|
||||||
// update frequency here will just consume bandwidth and is only
|
|
||||||
// noticable if you have a good connection
|
|
||||||
if(+new Date() - this.lastCursorUpdate < 1 / this.cursorUpdateFrequency)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
// Update the server on the mouse's position
|
|
||||||
this.sendCursorUpdate();
|
|
||||||
|
|
||||||
this.lastFrameStart = +new Date();
|
|
||||||
}).bind(this), 1 / this.cursorUpdateFrequency);
|
|
||||||
|
|
||||||
}).bind(this));
|
|
||||||
|
|
||||||
this.sendCursorUpdate();
|
|
||||||
}
|
|
||||||
|
|
||||||
sendCursorUpdate()
|
|
||||||
{
|
|
||||||
// Update the server on the mouse's position
|
|
||||||
this.rippleLink.send({
|
|
||||||
"Event": "CursorPosition",
|
|
||||||
"AbsCursorPosition": this.cursorPosition
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export default CursorSyncer;
|
|
|
@ -55,7 +55,7 @@ namespace Nibriboard.RippleSpace
|
||||||
public readonly int Size;
|
public readonly int Size;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The location of this chunk chunk on the plane.
|
/// The location of this chunk, in chunk-space, on the plane.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public readonly ChunkReference Location;
|
public readonly ChunkReference Location;
|
||||||
|
|
||||||
|
@ -170,7 +170,7 @@ namespace Nibriboard.RippleSpace
|
||||||
if (newLine.SpansMultipleChunks == true)
|
if (newLine.SpansMultipleChunks == true)
|
||||||
throw new ArgumentException("Error: A line you tried to add spans multiple chunks.", $"newLines[{i}]");
|
throw new ArgumentException("Error: A line you tried to add spans multiple chunks.", $"newLines[{i}]");
|
||||||
|
|
||||||
if (newLine.ContainingChunk != Location)
|
if (!newLine.ContainingChunk.Equals(Location))
|
||||||
throw new ArgumentException($"Error: A line you tried to add isn't in this chunk ({Location}).", $"newLine[{i}]");
|
throw new ArgumentException($"Error: A line you tried to add isn't in this chunk ({Location}).", $"newLine[{i}]");
|
||||||
|
|
||||||
lines.Add(newLine);
|
lines.Add(newLine);
|
||||||
|
@ -214,5 +214,15 @@ namespace Nibriboard.RippleSpace
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
public override string ToString()
|
||||||
|
{
|
||||||
|
return string.Format(
|
||||||
|
"Chunk{0} {1} - {2} lines",
|
||||||
|
CouldUnload ? "!" : ":",
|
||||||
|
Location,
|
||||||
|
lines.Count
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -195,7 +195,7 @@ namespace Nibriboard.RippleSpace
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Log.WriteLine("[Plane {0}] Chunk at {1} {2} updated", Name, updatingChunk.Location, eventArgs.UpdateType);
|
Log.WriteLine("[Plane {0}] Chunk at {1} updated because {2}", Name, updatingChunk.Location, eventArgs.UpdateType);
|
||||||
|
|
||||||
// Make the chunk update bubble up to plane-level
|
// Make the chunk update bubble up to plane-level
|
||||||
OnChunkUpdate(sender, eventArgs);
|
OnChunkUpdate(sender, eventArgs);
|
||||||
|
|
Loading…
Reference in a new issue