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')
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')
def forever(self): Server.forever(providers=[self.provider])
def start_server(self) -> None: """ Starts the server and runs until KeyboardInterrupt. """ print("Starting Server...") Server.forever(providers=[providers])
def start_server(self): Server.forever(providers=[self.providers])
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')
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, }])
('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 }])
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, }])