mirror of
				https://gitlab.ub.uni-bielefeld.de/sfb1288inf/nopaque.git
				synced 2025-11-04 04:12:45 +00:00 
			
		
		
		
	Change the user session SocketIO Logic
This commit is contained in:
		@@ -1,21 +1,30 @@
 | 
			
		||||
class App {
 | 
			
		||||
  constructor() {
 | 
			
		||||
    this.data = {users: {}};
 | 
			
		||||
    this.eventListeners = {'users.patch': []};
 | 
			
		||||
    this.promises = {users: {}};
 | 
			
		||||
    this.socket = io({transports: ['websocket'], upgrade: false});
 | 
			
		||||
    this.socket.on('users.patch', patch => this.usersPatchHandler(patch));
 | 
			
		||||
    this.socket.on('PATCH', (patch) => {this.data = jsonpatch.applyPatch(this.data, patch).newDocument;});
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  get users() {
 | 
			
		||||
    return this.data.users;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  addEventListener(type, listener) {
 | 
			
		||||
    if (!(type in this.eventListeners)) {
 | 
			
		||||
      throw `Unknown event type: ${type}`;
 | 
			
		||||
  subscribeUser(userId) {
 | 
			
		||||
    if (userId in this.promises.users) {
 | 
			
		||||
      return this.promises.users[userId];
 | 
			
		||||
    }
 | 
			
		||||
    this.eventListeners[type].push(listener);
 | 
			
		||||
    this.promises.users[userId] = new Promise((resolve, reject) => {
 | 
			
		||||
      this.socket.emit('SUBSCRIBE /users/<user_id>', userId, response => {
 | 
			
		||||
        if (response.code === 200) {
 | 
			
		||||
          this.data.users[userId] = response.payload;
 | 
			
		||||
          resolve(this.data.users[userId]);
 | 
			
		||||
        } else {
 | 
			
		||||
          reject(response);
 | 
			
		||||
        }
 | 
			
		||||
      });
 | 
			
		||||
    });
 | 
			
		||||
    return this.promises.users[userId];
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  flash(message, category) {
 | 
			
		||||
@@ -50,29 +59,4 @@ class App {
 | 
			
		||||
    toastCloseActionElement = toast.el.querySelector('.toast-action[data-action="close"]');
 | 
			
		||||
    toastCloseActionElement.addEventListener('click', () => {toast.dismiss();});
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  getUserById(userId) {
 | 
			
		||||
    if (userId in this.promises.users) {
 | 
			
		||||
      return this.promises.users[userId];
 | 
			
		||||
    }
 | 
			
		||||
    this.promises.users[userId] = new Promise((resolve, reject) => {
 | 
			
		||||
      this.socket.emit('users.user.get', userId, response => {
 | 
			
		||||
        if (response.code === 200) {
 | 
			
		||||
          this.data.users[userId] = response.payload;
 | 
			
		||||
          resolve(this.data.users[userId]);
 | 
			
		||||
        } else {
 | 
			
		||||
          reject(response);
 | 
			
		||||
        }
 | 
			
		||||
      });
 | 
			
		||||
    });
 | 
			
		||||
    return this.promises.users[userId];
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  usersPatchHandler(patch) {
 | 
			
		||||
    let listener;
 | 
			
		||||
 | 
			
		||||
    this.data = jsonpatch.applyPatch(this.data, patch).newDocument;
 | 
			
		||||
    //this.data = jsonpatch.apply_patch(this.data, patch);
 | 
			
		||||
    for (listener of this.eventListeners['users.patch']) {listener(patch);}
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,16 +1,17 @@
 | 
			
		||||
class JobStatusNotifier {
 | 
			
		||||
  constructor(userId) {
 | 
			
		||||
    this.userId = userId;
 | 
			
		||||
    app.socket.on('PATCH', (patch) => {this.onPATCH(patch);});
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  usersPatchHandler(patch) {
 | 
			
		||||
  onPATCH(patch) {
 | 
			
		||||
    let filteredPatch;
 | 
			
		||||
    let jobId;
 | 
			
		||||
    let match;
 | 
			
		||||
    let operation;
 | 
			
		||||
    let re;
 | 
			
		||||
 | 
			
		||||
    re = new RegExp(`^/users/${this.userId}/jobs/([A-Za-z0-9]*)/status$`)
 | 
			
		||||
    re = new RegExp(`^/users/${this.userId}/jobs/([A-Za-z0-9]*)/status$`);
 | 
			
		||||
    filteredPatch = patch
 | 
			
		||||
      .filter(operation => operation.op === 'replace')
 | 
			
		||||
      .filter(operation => re.test(operation.path));
 | 
			
		||||
 
 | 
			
		||||
@@ -16,7 +16,7 @@ class CorpusDisplay extends RessourceDisplay {
 | 
			
		||||
    this.setNumTokens(corpus.num_tokens);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  usersPatchHandler(patch) {
 | 
			
		||||
  onPATCH(patch) {
 | 
			
		||||
    let filteredPatch;
 | 
			
		||||
    let operation;
 | 
			
		||||
    let re;
 | 
			
		||||
 
 | 
			
		||||
@@ -18,7 +18,7 @@ class JobDisplay extends RessourceDisplay {
 | 
			
		||||
    this.setTitle(job.title);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  usersPatchHandler(patch) {
 | 
			
		||||
  onPATCH(patch) {
 | 
			
		||||
    let filteredPatch;
 | 
			
		||||
    let operation;
 | 
			
		||||
    let re;
 | 
			
		||||
 
 | 
			
		||||
@@ -2,13 +2,13 @@ class RessourceDisplay {
 | 
			
		||||
  constructor(displayElement) {
 | 
			
		||||
    this.displayElement = displayElement;
 | 
			
		||||
    this.userId = this.displayElement.dataset.userId;
 | 
			
		||||
    app.addEventListener('users.patch', patch => this.usersPatchHandler(patch));
 | 
			
		||||
    app.getUserById(this.userId).then(user => this.init(user));
 | 
			
		||||
    app.socket.on('PATCH', (patch) => {this.onPATCH(patch);});
 | 
			
		||||
    app.subscribeUser(this.userId).then((user) => {this.init(user);});
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  init(user) {throw 'Not implemented';}
 | 
			
		||||
 | 
			
		||||
  usersPatchHandler(patch) {throw 'Not implemented';}
 | 
			
		||||
  onPATCH(patch) {throw 'Not implemented';}
 | 
			
		||||
 | 
			
		||||
  setElement(element, value) {
 | 
			
		||||
    switch (element.tagName) {
 | 
			
		||||
 
 | 
			
		||||
@@ -96,7 +96,7 @@ class CorpusFileList extends RessourceList {
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  usersPatchHandler(patch) {
 | 
			
		||||
  onPATCH(patch) {
 | 
			
		||||
    let corpusFileId;
 | 
			
		||||
    let filteredPatch;
 | 
			
		||||
    let match;
 | 
			
		||||
 
 | 
			
		||||
@@ -88,7 +88,7 @@ class CorpusList extends RessourceList {
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  usersPatchHandler(patch) {
 | 
			
		||||
  onPATCH(patch) {
 | 
			
		||||
    let corpusId;
 | 
			
		||||
    let filteredPatch;
 | 
			
		||||
    let match;
 | 
			
		||||
 
 | 
			
		||||
@@ -54,5 +54,5 @@ class JobInputList extends RessourceList {
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  usersPatchHandler(patch) {return;}
 | 
			
		||||
  onPATCH(patch) {return;}
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -94,7 +94,7 @@ class JobList extends RessourceList {
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  usersPatchHandler(patch) {
 | 
			
		||||
  onPATCH(patch) {
 | 
			
		||||
    let filteredPatch;
 | 
			
		||||
    let jobId;
 | 
			
		||||
    let match;
 | 
			
		||||
 
 | 
			
		||||
@@ -57,7 +57,7 @@ class JobResultList extends RessourceList {
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  usersPatchHandler(patch) {
 | 
			
		||||
  onPATCH(patch) {
 | 
			
		||||
    let filteredPatch;
 | 
			
		||||
    let operation;
 | 
			
		||||
    let re;
 | 
			
		||||
 
 | 
			
		||||
@@ -89,7 +89,7 @@ class QueryResultList extends RessourceList {
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  usersPatchHandler(patch) {
 | 
			
		||||
  onPATCH(patch) {
 | 
			
		||||
    let filteredPatch;
 | 
			
		||||
    let match;
 | 
			
		||||
    let operation;
 | 
			
		||||
 
 | 
			
		||||
@@ -91,10 +91,10 @@ class RessourceList {
 | 
			
		||||
    this.userId = this.listjs.listContainer.dataset.userId;
 | 
			
		||||
    this.listjs.list.addEventListener('click', event => this.onclick(event));
 | 
			
		||||
    if (this.userId) {
 | 
			
		||||
      app.addEventListener('users.patch', patch => this.usersPatchHandler(patch));
 | 
			
		||||
      app.getUserById(this.userId).then(
 | 
			
		||||
        user => this.init(user),
 | 
			
		||||
        error => {throw JSON.stringify(error);}
 | 
			
		||||
      app.socket.on('PATCH', (patch) => {this.onPATCH(patch);});
 | 
			
		||||
      app.subscribeUser(this.userId).then(
 | 
			
		||||
        (user) => {this.init(user);},
 | 
			
		||||
        (error) => {throw JSON.stringify(error);}
 | 
			
		||||
      );
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
@@ -117,7 +117,7 @@ class RessourceList {
 | 
			
		||||
 | 
			
		||||
  onclick(event) {throw 'Not implemented';}
 | 
			
		||||
 | 
			
		||||
  usersPatchHandler(patch) {throw 'Not implemented';}
 | 
			
		||||
  onPATCH(patch) {throw 'Not implemented';}
 | 
			
		||||
 | 
			
		||||
  add(ressources) {
 | 
			
		||||
    let values = Array.isArray(ressources) ? ressources : [ressources];
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user