You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

56 line
1.1 KiB

  1. //Imports
  2. const eventEmitter = require('../misc/events');
  3. //Local State
  4. const stagedRezones = [];
  5. //Methods
  6. //Fired when an object is removed through a socket dc
  7. // We do this because a client might DC during rezone handshake
  8. const unstageRezone = msg => {
  9. stagedRezones.spliceWhere(s => s.simplifiedObj.serverId === msg.obj.id);
  10. };
  11. const stageRezone = (simplifiedObj, targetZone) => {
  12. const { serverId } = simplifiedObj;
  13. stagedRezones.spliceWhere(o => o.simplifiedObj.serverId === serverId);
  14. stagedRezones.push({ simplifiedObj, targetZone });
  15. };
  16. const doRezone = stagedRezone => {
  17. const { simplifiedObj, targetZone } = stagedRezone;
  18. process.send({
  19. method: 'rezone',
  20. id: simplifiedObj.serverId,
  21. args: {
  22. obj: simplifiedObj,
  23. newZone: targetZone
  24. }
  25. });
  26. };
  27. const clientAck = msg => {
  28. const staged = stagedRezones.find(s => s.simplifiedObj.serverId === msg.sourceId);
  29. if (!staged)
  30. return;
  31. stagedRezones.spliceWhere(s => s === staged);
  32. doRezone(staged);
  33. };
  34. const init = () => {
  35. eventEmitter.on('removeObject', unstageRezone);
  36. };
  37. //Exports
  38. module.exports = {
  39. init,
  40. stageRezone,
  41. clientAck
  42. };