Class: Yoda::Server::RootHandler

Inherits:
Object
  • Object
show all
Extended by:
Forwardable
Defined in:
lib/yoda/server/root_handler.rb

Defined Under Namespace

Classes: NotImplementedMethod

Constant Summary collapse

NOT_INITIALIZED =
:not_initialized

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(writer:, scheduler: nil) ⇒ RootHandler

Returns a new instance of RootHandler.

Parameters:



21
22
23
24
25
# File 'lib/yoda/server/root_handler.rb', line 21

def initialize(writer:, scheduler: nil)
  @scheduler = scheduler || Scheduler.new
  @writer = writer
  @future_map = Concurrent::Map.new
end

Instance Attribute Details

#schedulerScheduler (readonly)

Returns:



17
18
19
# File 'lib/yoda/server/root_handler.rb', line 17

def scheduler
  @scheduler
end

#writerConcurrentWriter (readonly)

Returns:



14
15
16
# File 'lib/yoda/server/root_handler.rb', line 14

def writer
  @writer
end

Instance Method Details

#cancel_all_requestsObject



65
66
67
# File 'lib/yoda/server/root_handler.rb', line 65

def cancel_all_requests
  scheduler.cancel_all
end

#cancel_request(id) ⇒ Object

Parameters:

  • id (String)


61
62
63
# File 'lib/yoda/server/root_handler.rb', line 61

def cancel_request(id)
  scheduler.cancel(id)
end

#handle(id:, method:, params:) ⇒ Concurrent::Future?

Parameters:

  • id (String)
  • method (Symbol)
  • params (Hash)

Returns:

  • (Concurrent::Future, nil)


31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# File 'lib/yoda/server/root_handler.rb', line 31

def handle(id:, method:, params:)
  Logger.trace("Request (#{id}): #{method}(#{params})")
  if lifecycle_handler.handle?(method)
    return write_response(id, lifecycle_handler.handle(method: method, params: params))
  end

  return write_response(id, build_error_response(NOT_INITIALIZED)) unless session

  if provider = Providers.build_provider(notifier: notifier, session: session, method: method)
    provide_async(provider: provider, id: id, method: method, params: params)
  else
    if id
      write_response(id, build_error_response(NotImplementedMethod.new(method)))
    else
      Logger.instance.debug("A notification with a not implemented method (#{method}) received")
    end
  end
end

#notifierNotifier

Returns:



51
52
53
# File 'lib/yoda/server/root_handler.rb', line 51

def notifier
  @notifier ||= Notifier.new(writer)
end

#wait_for_termination(timeout:) ⇒ Object

Wait pending requests



56
57
58
# File 'lib/yoda/server/root_handler.rb', line 56

def wait_for_termination(timeout:)
  scheduler.wait_for_termination(timeout: timeout)
end