Project

General

Profile

« Previous | Next » 

Revision 70c59c34

Added by Marc Dequènes over 13 years ago

  • ID 70c59c34b5ec3708d5e1ecdb59e13465240b0d08

[evol] unified BotNet interface for both client and servers (as a client is also a micro server)

View differences:

bin/mapmaker
$: << File.join(File.dirname(__FILE__), "..", "lib")
require 'cyborghood/cyborg'
require 'cyborghood/cyborg/server'
require 'cyborghood/cyborg/botnet_server'
require 'cyborghood/services/dns'
......
bindtextdomain("cyborghood_mapmaker", {:path => Config::L10N_DIR, :charset => "UTF-8"})
class MapMaker < Cyborg
include BotServer
include BotNetServer
def interface
MapMakerInterface.instance
lib/cyborghood/cyborg/botnet.rb
#--
# CyborgHood, a distributed system management software.
# Copyright (c) 2009-2010 Marc Dequènes (Duck) <Duck@DuckCorp.org>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#++
require 'cyborghood/cyborg/interface'
require 'cyborghood/cyborg/conversation'
module CyborgHood
# default interface if not overridden
# a mere "BotClient" would then always have a default basic interface
class EmptyInterface
include CyborgServerInterface
include CyborgServerRootInterfaceAddon
end
module BotNet
attr_reader :interface
def setup
super
@comm_list = {}
end
# used to quit properly and later to reuse communication channels
def register_communication(peer, conversation)
@comm_list[peer] = conversation
end
def unregister_communication(peer)
@comm_list.delete(peer)
end
def ask_to_stop
@comm_list.values.each {|conv| conv.bye }
super
end
def interface
EmptyInterface.instance
end
end
end
lib/cyborghood/cyborg/botnet_server.rb
#--
# CyborgHood, a distributed system management software.
# Copyright (c) 2009-2010 Marc Dequènes (Duck) <Duck@DuckCorp.org>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#++
require 'cyborghood/cyborg/botnet'
module CyborgHood
module BotNetServerUNIXSocket
def setup
super
@socket = File.join(Config::RUN_DIR, @config.bot_name.downcase + ".sock")
at_exit { remove_socket_file }
end
def start_work
super
EventMachine.start_unix_domain_server(@socket, Conversation, self)
end
def remove_socket_file
File.delete(@socket) if @socket && File.exist?(@socket)
end
# backend-specific capabilities
def capabilities
super + []
end
# TODO: should be common to the future BotClientUNIXSocket
def identifier_prefix
"unix_socket"
end
end
module BotNetServer
def self.included(base)
base.class_eval("include BotNet")
case Config.instance.botnet.connection_type
when 'unix_socket'
return base.class_eval("include BotNetServerUNIXSocket")
else
raise CyberError.new(:unrecoverable, "config", "Unknown botnet connection type")
end
end
end
end
lib/cyborghood/cyborg/server.rb
#--
# CyborgHood, a distributed system management software.
# Copyright (c) 2009-2010 Marc Dequènes (Duck) <Duck@DuckCorp.org>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#++
require 'cyborghood/cyborg/interface'
require 'cyborghood/cyborg/conversation'
module CyborgHood
module BotServerUNIXSocket
def setup
super
@socket = File.join(Config::RUN_DIR, @config.bot_name.downcase + ".sock")
at_exit { remove_socket_file }
end
def start_work
super
EventMachine.start_unix_domain_server(@socket, Conversation, self)
end
def remove_socket_file
File.delete(@socket) if @socket && File.exist?(@socket)
end
# backend-specific capabilities
def capabilities
super + []
end
# TODO: should be common to the future BotClientUNIXSocket
def identifier_prefix
"unix_socket"
end
end
# default interface if not overridden
class EmptyInterface
include CyborgServerInterface
include CyborgServerRootInterfaceAddon
end
module BotServer
attr_reader :interface
def self.included(base)
case Config.instance.botnet.connection_type
when 'unix_socket'
return base.class_eval("include BotServerUNIXSocket")
else
raise CyberError.new(:unrecoverable, "config", "Unknown botnet connection type")
end
end
def setup
super
@comm_list = {}
end
# used to quit properly and later to reuse communication channels
def register_communication(peer, conversation)
@comm_list[peer] = conversation
end
def unregister_communication(peer)
@comm_list.delete(peer)
end
def ask_to_stop
@comm_list.values.each {|conv| conv.bye }
super
end
def interface
EmptyInterface.instance
end
end
end

Also available in: Unified diff