Class: Citrus::Server::Server

Inherits:
Object
  • Object
show all
Includes:
Utils::PathUtil, CitrusLoader
Defined in:
lib/citrus/server/server.rb

Overview

Server

Instance Method Summary collapse

Methods included from Utils::PathUtil

#get_handler_path, #get_sys_remote_path, #get_user_remote_path, #remote_path_record

Constructor Details

#initialize(app) ⇒ Server

Create a new server

Parameters:

  • app (Object)


24
25
26
27
28
29
30
31
32
33
34
35
36
37
# File 'lib/citrus/server/server.rb', line 24

def initialize app
  @app = app

  @global_filter_service = nil
  @filter_service = nil
  @handler_service = nil

  @crons = []
  @jobs = {}
  @state = :state_inited

  @app.on(:add_crons) { |crons| add_crons crons }
  @app.on(:remove_crons) { |crons| remove_crons crons }
end

Instance Method Details

#add_crons(crons) ⇒ Object

Add crons at runtime

Parameters:

  • crons (Array)


113
114
# File 'lib/citrus/server/server.rb', line 113

def add_crons crons
end

#after_startObject

After the sever start



51
52
# File 'lib/citrus/server/server.rb', line 51

def after_start
end

#global_handle(msg, session, &block) ⇒ Object

Global handler

Parameters:

  • msg (Hash)
  • session (Object)


63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
# File 'lib/citrus/server/server.rb', line 63

def global_handle msg, session, &block
  unless @state == :state_started
    block_given? and yield Exception.new 'server not started'
    return
  end

  route_record = parse_route msg['route']
  unless route_record
    block_given? and yield Exception.new 'meet unknown route message'
    return
  end

  dispatch = Proc.new { |err, resp, args|
    if err
      handle_error(true, err, msg, session, resp, args) { |err, resp, args|
        response true, err, msg, session, resp, args, &block
      }
      return
    end

    unless @app.server_type == route_record['server_type']
      do_forward(msg, session, route_record) { |err, resp, args|
        response true, err, msg, session, resp, args, &block
      }
    else
      do_handle(msg, session, route_record) { |err, resp, args|
        response true, err, msg, session, resp, args, &block
      }
    end
  }
  before_filter true, msg, session, &dispatch
end

#handle(msg, session, &block) ⇒ Object

Handle request

Parameters:

  • msg (Hash)
  • session (Object)


100
101
102
103
104
105
106
107
108
# File 'lib/citrus/server/server.rb', line 100

def handle msg, session, &block
  unless @state == :state_started
    block_given? and yield Exception.new 'server not started'
    return
  end

  route_record = parse_route msg['route']
  do_handle msg, session, route_record, &block
end

#remove_crons(crons) ⇒ Object

Remove crons at runtime

Parameters:

  • crons (Array)


119
120
# File 'lib/citrus/server/server.rb', line 119

def remove_crons crons
end

#startObject

Start the server



40
41
42
43
44
45
46
47
48
# File 'lib/citrus/server/server.rb', line 40

def start
  return unless @state == :state_inited

  @global_filter_service = init_filter true
  @filter_service = init_filter false
  @handler_service = init_handler

  @state = :state_started
end

#stopObject

Stop the server



55
56
57
# File 'lib/citrus/server/server.rb', line 55

def stop
  @state = :state_stoped
end