Make ponsim_olt work for asfvolt16_olt adapter.

This is the first commit where olt activate is tested.

Change-Id: Ifa3967d8650741db8feeeff1a271618408ea4da1
diff --git a/ponsim/grpc_server.py b/ponsim/grpc_server.py
index fb08346..13d0ab9 100644
--- a/ponsim/grpc_server.py
+++ b/ponsim/grpc_server.py
@@ -18,65 +18,12 @@
 import os
 from concurrent import futures
 
-from common.utils.grpc_utils import twisted_async
 from voltha.protos import third_party
-from voltha.protos.ponsim_pb2 import PonSimServicer, \
-    add_PonSimServicer_to_server, PonSimDeviceInfo
-from google.protobuf.empty_pb2 import Empty
-
-from voltha.protos.ponsim_pb2 import XPonSimServicer, add_XPonSimServicer_to_server
 
 _ = third_party
 
 log = structlog.get_logger()
 
-
-class FlowUpdateHandler(PonSimServicer):
-
-    def __init__(self, thread_pool, ponsim):
-        self.thread_pool = thread_pool
-        self.ponsim = ponsim
-
-    @twisted_async
-    def GetDeviceInfo(self, request, context):
-        log.info('get-device-info')
-        ports = self.ponsim.get_ports()
-        return PonSimDeviceInfo(
-            nni_port=ports[0],
-            uni_ports=ports[1:]
-        )
-
-    @twisted_async
-    def UpdateFlowTable(self, request, context):
-        log.info('flow-table-update', request=request, port=request.port)
-        if request.port == 0:
-            # by convention this is the olt port
-            self.ponsim.olt_install_flows(request.flows)
-        else:
-            self.ponsim.onu_install_flows(request.port, request.flows)
-        return Empty()
-
-    def GetStats(self, request, context):
-        return self.ponsim.get_stats()
-
-class XPonHandler(XPonSimServicer):
-
-    def __init__(self, thread_pool, x_pon_sim):
-        self.thread_pool = thread_pool
-        self.x_pon_sim = x_pon_sim
-
-    def CreateInterface(self, request, context):
-        self.x_pon_sim.CreateInterface(request)
-        return Empty()
-
-    def UpdateInterface(self, request, context):
-        self.x_pon_sim.UpdateInterface(request)
-        return Empty()
-
-    def RemoveInterface(self, request, context):
-        self.x_pon_sim.RemoveInterface(request)
-        return Empty()
-
 class GrpcServer(object):
 
     def __init__(self, port, ponsim, x_pon_sim):
@@ -86,12 +33,16 @@
         self.ponsim = ponsim
         self.x_pon_sim = x_pon_sim
 
-    def start(self):
+    '''
+    service_list: a list of (add_xyzSimServicer_to_server, xyzServicerClass)
+    e.g. [(add_PonSimServicer_to_server, FlowUpdateHandler),
+          (add_XPonSimServicer_to_server, XPonHandler)]
+    '''
+    def start(self, service_list):
         log.debug('starting')
-        handler = FlowUpdateHandler(self.thread_pool, self.ponsim)
-        add_PonSimServicer_to_server(handler, self.server)
-        x_pon_handler = XPonHandler(self.thread_pool, self.x_pon_sim)
-        add_XPonSimServicer_to_server(x_pon_handler, self.server)
+        for add_x_to_server, xServiceClass in service_list:
+            x_handler = xServiceClass(self.thread_pool, self.ponsim)
+            add_x_to_server(x_handler, self.server)
 
         # read in key and certificate
         try:
@@ -108,7 +59,6 @@
         # create server credentials
         server_credentials = grpc.ssl_server_credentials(((private_key, certificate_chain,),))
         self.server.add_secure_port('[::]:%s' % self.port, server_credentials)
-
         self.server.start()
         log.info('started')