97 lines
2.9 KiB
Python
97 lines
2.9 KiB
Python
#
|
|
# BitBake Base Server Code
|
|
#
|
|
# Copyright (C) 2006 - 2007 Michael 'Mickey' Lauer
|
|
# Copyright (C) 2006 - 2008 Richard Purdie
|
|
# Copyright (C) 2013 Alexandru Damian
|
|
#
|
|
# This program is free software; you can redistribute it and/or modify
|
|
# it under the terms of the GNU General Public License version 2 as
|
|
# published by the Free Software Foundation.
|
|
#
|
|
# 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, write to the Free Software Foundation, Inc.,
|
|
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
|
|
|
""" Base code for Bitbake server process
|
|
|
|
Have a common base for that all Bitbake server classes ensures a consistent
|
|
approach to the interface, and minimize risks associated with code duplication.
|
|
|
|
"""
|
|
|
|
""" BaseImplServer() the base class for all XXServer() implementations.
|
|
|
|
These classes contain the actual code that runs the server side, i.e.
|
|
listens for the commands and executes them. Although these implementations
|
|
contain all the data of the original bitbake command, i.e the cooker instance,
|
|
they may well run on a different process or even machine.
|
|
|
|
"""
|
|
|
|
class BaseImplServer():
|
|
def __init__(self):
|
|
self._idlefuns = {}
|
|
|
|
def addcooker(self, cooker):
|
|
self.cooker = cooker
|
|
|
|
def register_idle_function(self, function, data):
|
|
"""Register a function to be called while the server is idle"""
|
|
assert hasattr(function, '__call__')
|
|
self._idlefuns[function] = data
|
|
|
|
|
|
|
|
""" BitBakeBaseServerConnection class is the common ancestor to all
|
|
BitBakeServerConnection classes.
|
|
|
|
These classes control the remote server. The only command currently
|
|
implemented is the terminate() command.
|
|
|
|
"""
|
|
|
|
class BitBakeBaseServerConnection():
|
|
def __init__(self, serverImpl):
|
|
pass
|
|
|
|
def terminate(self):
|
|
pass
|
|
|
|
|
|
""" BitBakeBaseServer class is the common ancestor to all Bitbake servers
|
|
|
|
Derive this class in order to implement a BitBakeServer which is the
|
|
controlling stub for the actual server implementation
|
|
|
|
"""
|
|
class BitBakeBaseServer(object):
|
|
def initServer(self):
|
|
self.serverImpl = None # we ensure a runtime crash if not overloaded
|
|
self.connection = None
|
|
return
|
|
|
|
def addcooker(self, cooker):
|
|
self.cooker = cooker
|
|
self.serverImpl.addcooker(cooker)
|
|
|
|
def getServerIdleCB(self):
|
|
return self.serverImpl.register_idle_function
|
|
|
|
def saveConnectionDetails(self):
|
|
return
|
|
|
|
def detach(self):
|
|
return
|
|
|
|
def establishConnection(self, featureset):
|
|
raise "Must redefine the %s.establishConnection()" % self.__class__.__name__
|
|
|
|
def endSession(self):
|
|
self.connection.terminate()
|