aboutsummaryrefslogtreecommitdiff
path: root/src/server
diff options
context:
space:
mode:
authorTyler Schicke <tyler_schicke@brown.edu>2019-02-14 05:43:09 -0500
committerTyler Schicke <tyler_schicke@brown.edu>2019-02-14 05:43:09 -0500
commit4bcc62fd164c5ee6c4fc50077753ba7d969478e3 (patch)
treed3a0a7ffc657ef890e640c52dd1e906bf19701c0 /src/server
parent4eb4ef6e073652661dcfa30597f63e93058fb876 (diff)
Got almost all of collaboration and server communication working
Diffstat (limited to 'src/server')
-rw-r--r--src/server/Message.ts1
-rw-r--r--src/server/ServerUtil.ts22
-rw-r--r--src/server/database.ts25
-rw-r--r--src/server/index.ts27
4 files changed, 48 insertions, 27 deletions
diff --git a/src/server/Message.ts b/src/server/Message.ts
index 528ba0cd7..1ec6e25f3 100644
--- a/src/server/Message.ts
+++ b/src/server/Message.ts
@@ -121,6 +121,7 @@ export namespace MessageStore {
export const AddDocument = new Message<DocumentTransfer>("Add Document");
export const SetField = new Message<{ _id: string, data: any, type: Types }>("Set Field")
export const GetField = new Message<string>("Get Field")
+ export const GetFields = new Message<string[]>("Get Fields")
export const GetDocument = new Message<string>("Get Document");
export const DeleteAll = new Message<any>("Delete All");
} \ No newline at end of file
diff --git a/src/server/ServerUtil.ts b/src/server/ServerUtil.ts
index d1de71dbe..03b9751da 100644
--- a/src/server/ServerUtil.ts
+++ b/src/server/ServerUtil.ts
@@ -11,38 +11,36 @@ import { Types } from './Message';
import { Utils } from '../Utils';
export class ServerUtils {
- public static FromJson(json: string): Field {
- let obj = JSON.parse(JSON.stringify(json))
- console.log(obj)
+ public static FromJson(json: any): Field {
+ let obj = json
let data: any = obj.data
let id: string = obj._id
let type: Types = obj.type
- if (!(data && id && type != undefined)) {
+ if (!(data !== undefined && id && type !== undefined)) {
console.log("how did you manage to get an object that doesn't have a data or an id?")
return new TextField("Something to fill the space", Utils.GenerateGuid());
}
switch (type) {
case Types.Number:
- return new NumberField(data, id)
+ return new NumberField(data, id, false)
case Types.Text:
- return new TextField(data, id)
+ return new TextField(data, id, false)
case Types.RichText:
- return new RichTextField(data, id)
+ return new RichTextField(data, id, false)
case Types.Key:
- return new Key(data, id)
+ return new Key(data, id, false)
case Types.Image:
- return new ImageField(data, id)
+ return new ImageField(data, id, false)
case Types.List:
- return new ListField(data, id)
+ return ListField.FromJson(id, data)
case Types.Document:
- let doc: Document = new Document(id)
+ let doc: Document = new Document(id, false)
let fields: [string, string][] = data as [string, string][]
fields.forEach(element => {
doc._proxies.set(element[0], element[1]);
});
- console.log(doc._proxies)
return doc
}
return new TextField(data, id)
diff --git a/src/server/database.ts b/src/server/database.ts
index 282238327..51103520e 100644
--- a/src/server/database.ts
+++ b/src/server/database.ts
@@ -12,7 +12,9 @@ export class Database {
public update(id: string, value: any) {
this.MongoClient.connect(this.url, { bufferMaxEntries: 1 }, (err, db) => {
let collection = db.db().collection('documents');
- collection.update({ _id: id }, { $set: value });
+ collection.update({ _id: id }, { $set: value }, {
+ upsert: true
+ });
db.close();
});
}
@@ -34,15 +36,12 @@ export class Database {
public insert(kvpairs: any) {
this.MongoClient.connect(this.url, { bufferMaxEntries: 1 }, (err, db) => {
- // console.log(kvpairs)
let collection = db.db().collection('documents');
collection.insertOne(kvpairs, (err: any, res: any) => {
if (err) {
// console.log(err)
return
}
- // console.log(kvpairs)
- // console.log("1 document inserted")
});
db.close();
});
@@ -69,6 +68,24 @@ export class Database {
});
}
+ public getDocuments(ids: string[], fn: (res: any) => void) {
+ var result: JSON;
+ this.MongoClient.connect(this.url, {
+ bufferMaxEntries: 1
+ }, (err, db) => {
+ if (err) {
+ console.log(err)
+ return undefined
+ }
+ let collection = db.db().collection('documents');
+ let cursor = collection.find({ _id: { "$in": ids } })
+ cursor.toArray((err, docs) => {
+ fn(docs);
+ })
+ db.close();
+ });
+ }
+
public print() {
console.log("db says hi!")
}
diff --git a/src/server/index.ts b/src/server/index.ts
index ef02ffbfc..812338080 100644
--- a/src/server/index.ts
+++ b/src/server/index.ts
@@ -14,6 +14,7 @@ import { Database } from './database';
import { ServerUtils } from './ServerUtil';
import { ObjectID } from 'mongodb';
import { Document } from '../fields/Document';
+import * as io from 'socket.io'
const config = require('../../webpack.config')
const compiler = webpack(config)
const port = 1050; // default port to listen
@@ -30,6 +31,11 @@ app.get("/hello", (req, res) => {
res.send("<p>Hello</p>");
})
+app.get("/delete", (req, res) => {
+ deleteAll();
+ res.redirect("/");
+});
+
app.use(wdm(compiler, {
publicPath: config.output.publicPath
}))
@@ -41,7 +47,7 @@ app.listen(port, () => {
console.log(`server started at http://localhost:${port}`);
})
-const server = require("socket.io")();
+const server = io();
interface Map {
[key: string]: Client;
}
@@ -53,8 +59,9 @@ server.on("connection", function (socket: Socket) {
Utils.Emit(socket, MessageStore.Foo, "handshooken")
Utils.AddServerHandler(socket, MessageStore.Bar, barReceived)
- Utils.AddServerHandler(socket, MessageStore.SetField, setField)
+ Utils.AddServerHandler(socket, MessageStore.SetField, (args) => setField(socket, args))
Utils.AddServerHandlerCallback(socket, MessageStore.GetField, getField)
+ Utils.AddServerHandlerCallback(socket, MessageStore.GetFields, getFields)
Utils.AddServerHandler(socket, MessageStore.DeleteAll, deleteAll)
})
@@ -82,15 +89,13 @@ function getField([id, callback]: [string, (result: any) => void]) {
})
}
-function setField(newValue: Transferable) {
- Database.Instance.getDocument(newValue._id, (res: any) => {
- if (res) {
- Database.Instance.update(newValue._id, newValue)
- }
- else {
- Database.Instance.insert(newValue)
- }
- })
+function getFields([ids, callback]: [string[], (result: any) => void]) {
+ Database.Instance.getDocuments(ids, callback);
+}
+
+function setField(socket: Socket, newValue: Transferable) {
+ Database.Instance.update(newValue._id, newValue)
+ socket.broadcast.emit(MessageStore.SetField.Message, newValue)
}
server.listen(serverPort);