add eventManager.js

pull/7/head
yann300 9 years ago
parent 80ee748875
commit e5594b7c56
  1. 6
      src/asmCode.js
  2. 54
      src/codeManager.js
  3. 4
      src/debugger.js
  4. 22
      src/eventManager.js
  5. 9
      src/util.js

@ -23,8 +23,10 @@ module.exports = React.createClass({
},
componentDidMount: function () {
this.context.codeManager.registerIndexChangedListener(this, this.indexChanged)
this.context.codeManager.registerCodeChangedListener(this, this.codeChanged)
this.context.codeManager.register('indexChanged', this, this.indexChanged)
this.context.codeManager.register('codeChanged', this, this.codeChanged)
this.context.codeManager.register('loadingCode', this, function (address) {
})
},
indexChanged: function (index) {

@ -1,32 +1,30 @@
'use strict'
var traceManagerUtil = require('./traceManagerUtil')
var codeResolver = require('./codeResolver')
var util = require('./util')
var eventManager = require('./eventManager')
/*
resolve contract code referenced by vmtrace in order to be used by asm listview.
events:
- indexChanged: triggered when an item is selected
- codeChanged: triggered when an item (in a different context) is selected
- loadingCode: triggerred when loading new code
- resolvingStep: when CodeManager resolves code/selected instruction of a new step
*/
function CodeManager (_web3, _traceManager) {
util.extend(this, eventManager)
this.web3 = _web3
this.isLoading = false
this.traceManager = _traceManager
this.currentAddress = ''
this.indexChangedlisteners = []
this.codeChangedlisteners = []
codeResolver.setWeb3(_web3)
}
CodeManager.prototype.registerIndexChangedListener = function (obj, func) {
this.indexChangedlisteners.push({
obj: obj,
func: func
})
}
CodeManager.prototype.registerCodeChangedListener = function (obj, func) {
this.codeChangedlisteners.push({
obj: obj,
func: func
})
}
CodeManager.prototype.resolveCodeFor = function (stepIndex, tx) {
CodeManager.prototype.resolveStep = function (stepIndex, tx) {
if (stepIndex < 0) return
this.trigger('resolvingStep')
var self = this
if (stepIndex === 0) {
self.ensureCodeLoaded(tx.to, stepIndex, tx)
@ -51,9 +49,10 @@ CodeManager.prototype.ensureCodeLoaded = function (address, currentStep, tx) {
console.log(error)
} else {
var codes = codeResolver.cacheExecutingCode(address, hexCode)
self.trigger('loadingCode', [address])
self.getInstructionIndex(address, currentStep, function (error, result) {
if (!error) {
self.dispatchCodeChanged(codes.code, address, result)
self.trigger('codeChanged', [codes.code, address, result])
self.currentAddress = address
} else {
console.log(error)
@ -64,9 +63,10 @@ CodeManager.prototype.ensureCodeLoaded = function (address, currentStep, tx) {
} else {
codeResolver.resolveCode(address, currentStep, tx, function (address, code) {
// resoling code from stack
self.trigger('loadingCode', [address])
self.getInstructionIndex(address, currentStep, function (error, result) {
if (!error) {
self.dispatchCodeChanged(code, address, result)
self.trigger('codeChanged', [code, address, result])
self.currentAddress = address
} else {
console.log(error)
@ -78,7 +78,7 @@ CodeManager.prototype.ensureCodeLoaded = function (address, currentStep, tx) {
// only set selected item
this.getInstructionIndex(this.currentAddress, currentStep, function (error, result) {
if (!error) {
self.dispatchIndexChanged(result)
self.trigger('indexChanged', [result])
}
})
}
@ -96,18 +96,4 @@ CodeManager.prototype.getInstructionIndex = function (address, step, callback) {
})
}
CodeManager.prototype.dispatchIndexChanged = function (itemIndex) {
for (var listener in this.indexChangedlisteners) {
var l = this.indexChangedlisteners[listener]
l.func.call(l.obj, itemIndex)
}
}
CodeManager.prototype.dispatchCodeChanged = function (code, address, itemIndex) {
for (var listener in this.codeChangedlisteners) {
var l = this.codeChangedlisteners[listener]
l.func.call(l.obj, code, address, itemIndex)
}
}
module.exports = CodeManager

@ -44,7 +44,7 @@ module.exports = React.createClass({
this.setState({
currentStepIndex: stepIndex
})
this.props.context.codeManager.resolveCodeFor(stepIndex, this.state.tx)
this.props.context.codeManager.resolveStep(stepIndex, this.state.tx)
},
startDebugging: function (blockNumber, txIndex, tx) {
@ -62,7 +62,7 @@ module.exports = React.createClass({
currentStepIndex: 0
})
self.refs.stepManager.newTraceAvailable()
self.props.context.codeManager.resolveCodeFor(0, tx)
self.props.context.codeManager.resolveStep(0, tx)
})
}
})

@ -0,0 +1,22 @@
'use strict'
module.exports = {
registered: {},
register: function (eventName, obj, func) {
if (!this.registered[eventName]) {
this.registered[eventName] = []
}
this.registered[eventName].push({
obj: obj,
func: func
})
},
trigger: function (eventName, args) {
for (var listener in this.registered[eventName]) {
var l = this.registered[eventName][listener]
l.func.apply(l.obj, args)
}
}
}

@ -0,0 +1,9 @@
'use strict'
module.exports = {
extend: function (destination, source) {
for (var property in source) {
destination[property] = source[property]
}
// return destination
}
}
Loading…
Cancel
Save