def main(): # Bind to service port server_port = mach.BootstrapServer.lookup("org.freenas.test.mach.ipc-server") local_port = mach.Port() print 'Service port: {0}'.format(server_port) print 'Local port: {0}'.format(local_port) # Send a few messages for i in range(0, 100): msg = mach.Message() msg.bits = mach.make_msg_bits( mach.MessageType.MACH_MSG_TYPE_COPY_SEND, mach.MessageType.MACH_MSG_TYPE_MAKE_SEND ) msg.body = bytearray(random_str()) local_port.send(server_port, msg) reply = local_port.receive() print 'Received reply: {0}'.format(reply.body) if reply.body != msg.body: fail('Reply mismatch: {0} != {1}'.format(msg.body, reply.body)) # Exit msg = mach.Message() msg.bits = mach.make_msg_bits( mach.MessageType.MACH_MSG_TYPE_COPY_SEND, mach.MessageType.MACH_MSG_TYPE_MAKE_SEND ) msg.body = bytearray('EXIT') mach.null_port.send(server_port, msg)
def main(): port = mach.BootstrapServer.checkin("org.freenas.test.mach.ipc-server") print 'Service port: {0}'.format(port) while True: msg = port.receive() print 'Received message: {0}'.format(msg.body) if msg.body == 'EXIT': print 'Exiting cleanly' break else: # Send response print 'Sending response to remote port {0}'.format(msg.remote_port) reply = mach.Message() reply.body = bytearray(msg.body) reply.bits = mach.make_msg_bits(mach.MessageType.MACH_MSG_TYPE_COPY_SEND, 0) mach.null_port.send(msg.remote_port, reply)
def main(): port = mach.BootstrapServer.checkin("org.freenas.test.mach.ipc-server") print 'Service port: {0}'.format(port) while True: msg = port.receive() print 'Received message: {0}'.format(msg.body) if msg.body == 'EXIT': print 'Exiting cleanly' break else: # Send response print 'Sending response to remote port {0}'.format(msg.remote_port) reply = mach.Message() reply.body = bytearray(msg.body) reply.bits = mach.make_msg_bits( mach.MessageType.MACH_MSG_TYPE_COPY_SEND, 0) mach.null_port.send(msg.remote_port, reply)
# Create send port try: send = mach.Port() send.insert_right(mach.MessageType.MACH_MSG_TYPE_MAKE_SEND) print 'Send port: {0}'.format(send) except mach.MachException, e: fail('Cannot create send port: {0}'.format(e)) # Create receive port try: receive = mach.Port() receive.insert_right(mach.MessageType.MACH_MSG_TYPE_MAKE_SEND) print 'Receive port: {0}'.format(receive) except mach.MachException, e: fail('Cannot create receive port: {0}'.format(e)) threading.Thread(target=server, args=(receive, )).start() msg = mach.Message() msg.bits = mach.make_msg_bits(mach.MessageType.MACH_MSG_TYPE_COPY_SEND, mach.MessageType.MACH_MSG_TYPE_MAKE_SEND) msg.body = bytearray(struct.pack('256p', 'Hello World')) print 'Sent text: {0}'.format('Hello World') try: send.send(receive, msg) except mach.SendMessageException, e: fail('Cannot send message: {0}'.format(e)) if __name__ == '__main__': main()
print 'Receive port: {0}'.format(receive) except mach.MachException, e: fail('Cannot create receive port: {0}'.format(e)) # Prepare descriptors for i in range(0, random.randrange(5, 15)): buffer = mach.MemoryBuffer(data=bytearray(random_str(random.randrange(1, 1024 * 1024)))) desc = mach.MemoryDescriptor() desc.buffer = buffer descriptors.append(desc) t = threading.Thread(target=server, args=(receive,)) t.start() msg = mach.Message() msg.bits = mach.make_msg_bits(mach.MessageType.MACH_MSG_TYPE_COPY_SEND, mach.MessageType.MACH_MSG_TYPE_MAKE_SEND) msg.descriptors = descriptors msg.body = bytearray(struct.pack('256p', 'Hello World')) print 'Text to send: {0}'.format('Hello World') print 'Message to send:' describe_msg(msg) try: send.send(receive, msg) except mach.MessageSendException, e: fail('Cannot send message: {0}'.format(e)) if __name__ == '__main__': main()