예제 #1
0
    def run(self):
        self.provider = StaticProvider(__name__)

        self.fieldNames = SharedPV(initial=NTScalar('as').wrap(
            {'value': ['pid%02x' % i for i in range(31)]}),
                                   handler=DefaultPVHandler(self))

        # 'i' (integer) or 'f' (float)
        self.fieldTypes = SharedPV(initial=NTScalar('aB').wrap(
            {'value': [ord('i')] * 31}),
                                   handler=DefaultPVHandler(self))

        self.fieldMask = SharedPV(initial=NTScalar('I').wrap({'value':
                                                              0x8000}),
                                  handler=DefaultPVHandler(self))

        self.payload = SharedPV(initial=Value(Type([]), {}),
                                handler=DefaultPVHandler(self))

        print('Hosting {:}HPS:FIELDMASK'.format(self.prefix))
        self.provider.add(self.prefix + 'HPS:FIELDNAMES', self.fieldNames)
        self.provider.add(self.prefix + 'HPS:FIELDTYPES', self.fieldTypes)
        self.provider.add(self.prefix + 'HPS:FIELDMASK', self.fieldMask)
        self.provider.add(self.prefix + 'PAYLOAD', self.payload)
        self.update()

        try:
            Server.forever(providers=[self.provider])
        except:
            print('Server exited')
예제 #2
0
def main(args):
    provider = StaticProvider('mailbox')  # 'mailbox' is an arbitrary name

    pvs = [
    ]  # we must keep a reference in order to keep the Handler from being collected
    for name in args.name:
        pv = SharedPV(initial=types['int'], handler=MailboxHandler())

        provider.add(name, pv)
        pvs.append(pv)

    Server.forever(providers=[provider])

    print('Done')
예제 #3
0
 def forever(self):
     Server.forever(providers=[self.provider])
예제 #4
0
 def start_server(self) -> None:
     """
     Starts the server and runs until KeyboardInterrupt.
     """
     print("Starting Server...")
     Server.forever(providers=[providers])
예제 #5
0
    def start_server(self):

        Server.forever(providers=[self.providers])
예제 #6
0
        provider.add(name, pv)
        pvs[name] = pv
        names = list(pvs)  # makes a copy to ensure consistency outside lock

    _log.info("Added mailbox %s", name)
    listpv.post(names)
    op.done()


@delpv.rpc
def remover(pv, op):
    name = op.value().query.name

    with pvs_lock:
        if name not in pvs:
            op.done(error="PV doesn't exists")
            return
        pv = pvs.pop(name)
        provider.remove(name)
        names = list(pvs)  # makes a copy to ensure consistency outside lock

    _log.info("Removed mailbox %s", name)
    listpv.post(names)

    op.done()


Server.forever(providers=[provider])

print('Done')
예제 #7
0
    P.add_argument('pvname')
    P.add_argument('-g',
                   '--gray',
                   action='store_const',
                   const=True,
                   default=True)
    P.add_argument('-C',
                   '--color',
                   action='store_const',
                   const=False,
                   dest='gray')
    P.add_argument('-d',
                   '--debug',
                   action='store_const',
                   const=logging.DEBUG,
                   default=logging.INFO)
    return P.parse_args()


args = getargs()

logging.basicConfig(level=args.debug)

pv = SharedPV(nt=NTNDArray(), initial=face(gray=args.gray))

print('serving pv:', args.pvname)

Server.forever(providers=[{
    args.pvname: pv,
}])
예제 #8
0
             ('R34', 'd'), ('R35', 'd'), ('R36', 'd'), ('R41', 'd'),
             ('R42', 'd'), ('R43', 'd'), ('R44', 'd'), ('R45', 'd'),
             ('R46', 'd'), ('R51', 'd'), ('R52', 'd'), ('R53', 'd'),
             ('R54', 'd'), ('R55', 'd'), ('R56', 'd'), ('R61', 'd'),
             ('R62', 'd'), ('R63', 'd'), ('R64', 'd'), ('R65', 'd'),
             ('R66', 'd')]
rmat_table = NTTable(rmat_cols)
rows = [{key: rmat_data['value'][key][i]
         for key, _ in rmat_cols}
        for i in range(0, len(rmat_data['value']['ELEMENT_NAME']))]
rmat_vals = rmat_table.wrap(rows)
rmat_pv = SharedPV(nt=rmat_table, initial=rmat_vals)


@twiss_pv.rpc
def twiss_request_handler(pv, op):
    op.done(twiss_vals)


@rmat_pv.rpc
def rmat_request_handler(pv, op):
    op.done(rmat_vals)


print("Starting Model Service Test Server!")
Server.forever(providers=[{
    'MODEL:TWISS:EXTANT:FULLMACHINE': twiss_pv,
    'MODEL:TWISS:DESIGN:FULLMACHINE': twiss_pv,
    'MODEL:RMATS:EXTANT:FULLMACHINE': rmat_pv,
    'MODEL:RMATS:DESIGN:FULLMACHINE': rmat_pv
}])
예제 #9
0
from p4p.nt import NTScalar
from p4p.server import Server
from p4p.server.thread import SharedPV

pv1 = SharedPV(nt=NTScalar('d'), initial=0.0)
pv2 = SharedPV(nt=NTScalar('d'), initial=4.2)
pv3 = SharedPV(nt=NTScalar('d'), initial=24.2346692)


@pv1.put
#@pv2.put
#@pv3.put
def handleput(pv, op):
    print(
        f"You changed my value to: {op.value().raw['value']}, I used to be: {pv.current().raw['value']}"
    )
    pv.post(op.value())
    op.done()


print("Server running....")
Server.forever(providers=[{
    'p4p:pv1': pv1,
    'p4p:pv2': pv2,
    'p4p:pv3': pv3,
}])