func (p LeaveProcessor) Process() {

	app := types.GetApp(p.AppId, p.GetAgent())
	app.Lock()
	if app.Exists() {
		keys := []types.AppKey{}
		for _, e := range app.GetExports() {
			keys = append(keys, e.GetAppKey())
		}
		conn, _ := app.GetConnection()
		conn.Close()
		printDebug("LEAVE locking")
		printDebug("LEAVE unlocking")
		if !app.IsNode() {
			for _, exp := range app.GetExports() {
				printDebug("LEAVE unlocking")
				var m messages.RemoveExportMessage
				m.ExportId = exp.GetId()
				var smp SendMessageProcessor
				smp.Msg = m
				smp.GenericProcessor = processor.GetGenericProcessor()
				for _, n := range types.GetNodes(p.GetAgent()) {
					smp.App = n
					p.SpawnProcess(smp)
				}
			}
			for _, imp := range app.GetImports() {
				var m messages.RemoveImportMessage
				m.ImportId = imp.GetId()
				var smp SendMessageProcessor
				smp.Msg = m
				smp.GenericProcessor = processor.GetGenericProcessor()
				for _, n := range types.GetNodes(p.GetAgent()) {
					smp.App = n
					p.SpawnProcess(smp)
				}
			}

			printDebug("LEAVE removing")
			app.Remove()
			printDebug("LEAVE removed")

			for _, k := range keys {
				if k.Exists() {
					var esp ExportedStateProcessor
					esp.AppKey = k
					esp.GenericProcessor = processor.GetGenericProcessor()
					p.SpawnProcess(esp)
				}
			}
		}
	}

}
func (p RequestProcessor) Process() {
	app := types.GetApp(p.AppId, p.GetAgent())
	if !app.Exists() {
		mprint("Could not add jo, app does not exist")
		return
	}
	app.Lock()
	job := types.GetJobFromRequest(p.Request, p.GetAgent())
	job.Create()
	imp := job.GetImport()
	if job.Exists() && imp.HasExporter() {

		var djp DeliverJobProcessor
		djp.Job = job
		djp.GenericProcessor = processor.GetGenericProcessor()

		p.SpawnProcess(djp)

	}
	app.Unlock()
}
func (p AddExportProcessor) Process() {
	app := types.GetApp(p.AppId, p.GetAgent())
	if !app.Exists() {
		mprint("Could not add exmport, app does not exist")
		return
	}
	app.Lock()
	Export := types.GetExport(p.AppId, p.AddExportMsg.AppKey, p.AddExportMsg.Tags, p.AddExportMsg.ExportId, p.GetAgent())
	Export.Add()

	if !app.IsNode() {
		var smp SendMessageProcessor
		smp.App = app
		smp.Msg = messages.ExportAddedMessage{Export.GetId(), p.AddExportMsg.AppKey, p.AddExportMsg.Tags}
		smp.GenericProcessor = processor.GetGenericProcessor()
		p.SpawnProcess(smp)
	}

	var pjp PendingJobProcessor
	pjp.Appkey = Export.GetAppKey()
	pjp.GenericProcessor = processor.GetGenericProcessor()
	p.SpawnProcess(pjp)
	var uesp ExportedStateProcessor
	uesp.AppKey = Export.GetAppKey()
	uesp.GenericProcessor = processor.GetGenericProcessor()
	p.SpawnProcess(uesp)

	if !app.IsNode() {
		p.AddExportMsg.ExportId = Export.GetId()
		for _, node := range types.GetNodes(p.GetAgent()) {
			var smp SendMessageProcessor
			smp.App = node
			smp.Msg = p.AddExportMsg
			smp.GenericProcessor = processor.GetGenericProcessor()
			p.SpawnProcess(smp)
		}
	}
	app.Unlock()

}
func (p DockProcessor) Process() {
	if p.Connection != nil {
		decoder := util.GetCodec(p.Codec)
		if decoder == nil {
			return
		}
		var dmsg messages.DockMessage
		err := decoder.Decode(p.DockMessage, &dmsg)
		if err != nil {
			return
		}
		app := types.GetApp(p.AppId, p.GetAgent())
		ok := app.Create(dmsg, p.Connection)
		if ok {
			app.Lock()
			defer app.Unlock()
			conn, _ := app.GetConnection()
			err = conn.Init()
			if err != nil {
				return
			}
			if app.IsNode() {
				var sp SendMessageProcessor
				sp.App = app
				sp.Msg = messages.DockMessage{"runtime", []string{"JSON"}, true}
				sp.GenericProcessor = processor.GetGenericProcessor()
				p.SpawnProcess(sp)
			}

		}

		var sp SendMessageProcessor
		sp.App = app
		sp.Msg = messages.DockedMessage{ok}
		sp.GenericProcessor = processor.GetGenericProcessor()
		p.SpawnProcess(sp)

		if ok && app.IsNode() {
			for _, localapp := range types.GetApps(p.GetAgent()) {
				for _, imp := range localapp.GetImports() {
					var m messages.AddImportMessage
					m.AppKey = imp.GetAppKey().GetKey()
					m.Tags = imp.GetTagNames()
					m.ImportId = imp.GetId()
					var sp SendMessageProcessor
					sp.App = app
					sp.Msg = m
					sp.GenericProcessor = processor.GetGenericProcessor()
					p.SpawnProcess(sp)
				}
				for _, exp := range localapp.GetExports() {
					var m messages.AddExportMessage
					m.AppKey = exp.GetAppKey().GetKey()
					m.Tags = exp.GetTagNames()
					m.ExportId = exp.GetId()
					var sp SendMessageProcessor
					sp.App = app
					sp.Msg = m
					sp.GenericProcessor = processor.GetGenericProcessor()
					p.SpawnProcess(sp)
				}
			}
		}
	}

}