mirror of
https://github.com/sbrl/Nibriboard.git
synced 2018-01-10 21:33:49 +00:00
Set up ripple link websocket connection.
This commit is contained in:
parent
8a5dda1c05
commit
060f01cf75
7 changed files with 43 additions and 7 deletions
|
@ -20,6 +20,8 @@ namespace Nibriboard.Client
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public string WebsocketProtocol = "RippleLink";
|
||||||
|
|
||||||
public ClientSettings()
|
public ClientSettings()
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
|
@ -36,10 +36,11 @@ namespace Nibriboard.Client
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
response.ContentType = getMimeType(request.URI);
|
|
||||||
response.Headers.Add("content-type", response.ContentType);
|
|
||||||
|
|
||||||
string expandedFilePath = getEmbeddedFileReference(request.URI);
|
string expandedFilePath = getEmbeddedFileReference(request.URI);
|
||||||
|
if (!embeddedFiles.Contains(expandedFilePath)) {
|
||||||
|
expandedFilePath += "index.html";
|
||||||
|
}
|
||||||
if (!embeddedFiles.Contains(expandedFilePath)) {
|
if (!embeddedFiles.Contains(expandedFilePath)) {
|
||||||
response.ResponseCode = HttpResponseCode.NotFound;
|
response.ResponseCode = HttpResponseCode.NotFound;
|
||||||
response.ContentType = "text/plain";
|
response.ContentType = "text/plain";
|
||||||
|
@ -47,6 +48,10 @@ namespace Nibriboard.Client
|
||||||
logRequest(request, response);
|
logRequest(request, response);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
response.ContentType = getMimeType(expandedFilePath);
|
||||||
|
response.Headers.Add("content-type", response.ContentType);
|
||||||
|
|
||||||
byte[] embeddedFile = EmbeddedFiles.ReadAllBytes(expandedFilePath);
|
byte[] embeddedFile = EmbeddedFiles.ReadAllBytes(expandedFilePath);
|
||||||
response.ContentLength = embeddedFile.Length;
|
response.ContentLength = embeddedFile.Length;
|
||||||
response.Content.Write(embeddedFile, 0, embeddedFile.Length);
|
response.Content.Write(embeddedFile, 0, embeddedFile.Length);
|
||||||
|
|
|
@ -8,10 +8,13 @@ namespace Nibriboard.Client
|
||||||
{
|
{
|
||||||
public class NibriClientManager : IWebSocketRequestHandler
|
public class NibriClientManager : IWebSocketRequestHandler
|
||||||
{
|
{
|
||||||
|
ClientSettings clientSettings;
|
||||||
|
|
||||||
List<NibriClient> clients = new List<NibriClient>();
|
List<NibriClient> clients = new List<NibriClient>();
|
||||||
|
|
||||||
public NibriClientManager()
|
public NibriClientManager(ClientSettings inClientSettings)
|
||||||
{
|
{
|
||||||
|
clientSettings = inClientSettings;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -22,8 +25,8 @@ namespace Nibriboard.Client
|
||||||
/// <returns>Whether we want to accept the WebSocket connection attempt or not.</returns>
|
/// <returns>Whether we want to accept the WebSocket connection attempt or not.</returns>
|
||||||
public bool WillAcceptRequest(string uri, string protocol)
|
public bool WillAcceptRequest(string uri, string protocol)
|
||||||
{
|
{
|
||||||
Log.WriteLine("[Nibriboard/Websocket] Accepting {0} via {1}.", uri, protocol);
|
Log.WriteLine("[Nibriboard/Websocket] Accepting new {0} connection.", protocol);
|
||||||
return true;
|
return clientSettings.WebsocketProtocol == protocol;
|
||||||
}
|
}
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Handles WebSocket clients when they first connect, wrapping them in
|
/// Handles WebSocket clients when they first connect, wrapping them in
|
||||||
|
|
|
@ -22,6 +22,7 @@ class BoardWindow extends EventEmitter
|
||||||
FaviconNotification.add();
|
FaviconNotification.add();
|
||||||
|
|
||||||
get("/Settings.json").then(JSON.parse).then((function(settings) {
|
get("/Settings.json").then(JSON.parse).then((function(settings) {
|
||||||
|
console.info("[setup]", "Obtained settings from server:", settings);
|
||||||
this.settings = settings;
|
this.settings = settings;
|
||||||
this.setup();
|
this.setup();
|
||||||
}).bind(this), function(errorMessage) {
|
}).bind(this), function(errorMessage) {
|
||||||
|
@ -31,6 +32,10 @@ class BoardWindow extends EventEmitter
|
||||||
this.trackWindowSize();
|
this.trackWindowSize();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
setup() {
|
||||||
|
this.rippleLink = new RippleLink(this.settings.WebsocketUri, this);
|
||||||
|
}
|
||||||
|
|
||||||
nextFrame()
|
nextFrame()
|
||||||
{
|
{
|
||||||
this.update();
|
this.update();
|
||||||
|
|
|
@ -1,6 +1,18 @@
|
||||||
(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
|
(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
|
class RippleLink
|
||||||
|
{
|
||||||
|
constructor(inSocketUrl, inBoardWindow)
|
||||||
|
{
|
||||||
|
this.socketUrl = inSocketUrl;
|
||||||
|
this.boardWindow = inBoardWindow;
|
||||||
|
this.settings = this.boardWindow.settings;
|
||||||
|
|
||||||
|
this.websocket = new WebSocket( this.socketUrl, [ this.settings.WebsocketProtocol ] );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function get(u){return new Promise(function(r,t,a){a=new XMLHttpRequest();a.onload=function(b,c){b=a.status;c=a.response;if(b>199&&b<300){r(c);}else{t(c);}};a.open("GET",u,true);a.send(null);})}
|
function get(u){return new Promise(function(r,t,a){a=new XMLHttpRequest();a.onload=function(b,c){b=a.status;c=a.response;if(b>199&&b<300){r(c);}else{t(c);}};a.open("GET",u,true);a.send(null);})}
|
||||||
|
|
||||||
// npm modules
|
// npm modules
|
||||||
|
@ -22,6 +34,7 @@ class BoardWindow extends EventEmitter
|
||||||
FaviconNotification.add();
|
FaviconNotification.add();
|
||||||
|
|
||||||
get("/Settings.json").then(JSON.parse).then((function(settings) {
|
get("/Settings.json").then(JSON.parse).then((function(settings) {
|
||||||
|
console.info("[setup]", "Obtained settings from server:", settings);
|
||||||
this.settings = settings;
|
this.settings = settings;
|
||||||
this.setup();
|
this.setup();
|
||||||
}).bind(this), function(errorMessage) {
|
}).bind(this), function(errorMessage) {
|
||||||
|
@ -31,6 +44,10 @@ class BoardWindow extends EventEmitter
|
||||||
this.trackWindowSize();
|
this.trackWindowSize();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
setup() {
|
||||||
|
this.rippleLink = new RippleLink(this.settings.WebsocketUri, this);
|
||||||
|
}
|
||||||
|
|
||||||
nextFrame()
|
nextFrame()
|
||||||
{
|
{
|
||||||
this.update();
|
this.update();
|
||||||
|
|
|
@ -3,9 +3,13 @@
|
||||||
|
|
||||||
class RippleLink
|
class RippleLink
|
||||||
{
|
{
|
||||||
constructor(socketUrl)
|
constructor(inSocketUrl, inBoardWindow)
|
||||||
{
|
{
|
||||||
|
this.socketUrl = inSocketUrl;
|
||||||
|
this.boardWindow = inBoardWindow;
|
||||||
|
this.settings = this.boardWindow.settings;
|
||||||
|
|
||||||
|
this.websocket = new WebSocket( this.socketUrl, [ this.settings.WebsocketProtocol ] );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -47,7 +47,7 @@ namespace Nibriboard
|
||||||
// Websocket setup
|
// Websocket setup
|
||||||
httpServer.AddWebSocketRequestHandler(
|
httpServer.AddWebSocketRequestHandler(
|
||||||
clientSettings.WebsocketPath,
|
clientSettings.WebsocketPath,
|
||||||
new NibriClientManager()
|
new NibriClientManager(clientSettings)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue