diff options
| author | Tyler Schicke <tyler_schicke@brown.edu> | 2019-02-14 05:43:09 -0500 |
|---|---|---|
| committer | Tyler Schicke <tyler_schicke@brown.edu> | 2019-02-14 05:43:09 -0500 |
| commit | 4bcc62fd164c5ee6c4fc50077753ba7d969478e3 (patch) | |
| tree | d3a0a7ffc657ef890e640c52dd1e906bf19701c0 /src/server | |
| parent | 4eb4ef6e073652661dcfa30597f63e93058fb876 (diff) | |
Got almost all of collaboration and server communication working
Diffstat (limited to 'src/server')
| -rw-r--r-- | src/server/Message.ts | 1 | ||||
| -rw-r--r-- | src/server/ServerUtil.ts | 22 | ||||
| -rw-r--r-- | src/server/database.ts | 25 | ||||
| -rw-r--r-- | src/server/index.ts | 27 |
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); |
