Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

core.app 3.0: tick method, advanced app linking features #1475

Merged
merged 18 commits into from
Jul 4, 2022

Conversation

eugeneia
Copy link
Member

This adds a couple of features to core.app that should bridge the gap towards upstreaming @alexandergall’s ipfix changes.

tick()

As per #946 I added a n optional tick() method for apps useful for periodic housekeeping tasks. By default tick methods are called every millisecond.

link(dir, name) and unlink(dir, name)

Optional link() methods are now called with two arguments:

  • dir: "input" or "output"
  • name: the name of the link that has changed

I.e., if a new link is added to an app you can access it during link() at self[dir][name].

I also added an optional unlink() methos (with the same arguments) that gets called instead of link() if a link is removed.

push_link

This is a new way to provide push methods specific to a particular link. Can be used dynamically during link. Here an excerpt from the updated readme:

— Field myapp.push_link

Optional. When specified must be a table of per-link push() methods
that take an input link as an argument. For example an app could specify
a push_link method for its input link foo:

Myapp = { push_link={} }
function Myapp.push_link:foo (input)
  while not link.empty(input) do something() end
end

Push_link methods are copied to a fresh table when the app is started,
and it is valid to create push_link methods dynamically during link(),
for example like so:

Myapp = { push_link={} }
function Myapp:link (dir, name)
  -- NB: Myapp.push_link ~= self.push_link
  if dir == 'input' then
    self.push_link[name] = function (self, input)
      while not link.empty(input) do something() end
    end
  end
end
function Myapp:unlink (dir, name)
  if dir == 'input' then
    self.push_link[name] = nil
  end
end

Push is not called when an app has push_link methods
for all of its input links. If, however, an app at least one input link
without an associated push_link method then push is called
in addition to the push_link methods.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant