implemented chunked broadcast of updates
This commit is contained in:
		
							parent
							
								
									0e3e561ec7
								
							
						
					
					
						commit
						4028eee39d
					
				@ -42,6 +42,11 @@ export default function extendConnector (Y/* :any */) {
 | 
				
			|||||||
      if (opts.generateUserId !== false) {
 | 
					      if (opts.generateUserId !== false) {
 | 
				
			||||||
        this.setUserId(Y.utils.generateUserId())
 | 
					        this.setUserId(Y.utils.generateUserId())
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
 | 
					      if (opts.maxBufferLength == null) {
 | 
				
			||||||
 | 
					        this.maxBufferLength = -1
 | 
				
			||||||
 | 
					      } else {
 | 
				
			||||||
 | 
					        this.maxBufferLength = opts.maxBufferLength
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    reconnect () {
 | 
					    reconnect () {
 | 
				
			||||||
@ -197,14 +202,19 @@ export default function extendConnector (Y/* :any */) {
 | 
				
			|||||||
          encoder.writeVarString(self.opts.room)
 | 
					          encoder.writeVarString(self.opts.room)
 | 
				
			||||||
          encoder.writeVarString('update')
 | 
					          encoder.writeVarString('update')
 | 
				
			||||||
          let ops = self.broadcastOpBuffer
 | 
					          let ops = self.broadcastOpBuffer
 | 
				
			||||||
          self.broadcastOpBuffer = []
 | 
					 | 
				
			||||||
          let length = ops.length
 | 
					          let length = ops.length
 | 
				
			||||||
          encoder.writeUint32(length)
 | 
					          let encoderPosLen = encoder.pos
 | 
				
			||||||
          for (var i = 0; i < length; i++) {
 | 
					          encoder.writeUint32(0)
 | 
				
			||||||
 | 
					          for (var i = 0; i < length && (self.maxBufferLength < 0 || encoder.length < self.maxBufferLength); i++) {
 | 
				
			||||||
            let op = ops[i]
 | 
					            let op = ops[i]
 | 
				
			||||||
            Y.Struct[op.struct].binaryEncode(encoder, op)
 | 
					            Y.Struct[op.struct].binaryEncode(encoder, op)
 | 
				
			||||||
          }
 | 
					          }
 | 
				
			||||||
 | 
					          encoder.setUint32(encoderPosLen, i)
 | 
				
			||||||
 | 
					          self.broadcastOpBuffer = ops.slice(i)
 | 
				
			||||||
          self.broadcast(encoder.createBuffer())
 | 
					          self.broadcast(encoder.createBuffer())
 | 
				
			||||||
 | 
					          if (i !== length) {
 | 
				
			||||||
 | 
					            setTimeout(broadcastOperations, 100)
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
      if (this.broadcastOpBuffer.length === 0) {
 | 
					      if (this.broadcastOpBuffer.length === 0) {
 | 
				
			||||||
 | 
				
			|||||||
@ -8,6 +8,10 @@ export class BinaryEncoder {
 | 
				
			|||||||
    this.data = []
 | 
					    this.data = []
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  get length () {
 | 
				
			||||||
 | 
					    return this.data.length
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  get pos () {
 | 
					  get pos () {
 | 
				
			||||||
    return this.data.length
 | 
					    return this.data.length
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user