From: Brian G. <br...@ge...> - 2007-02-02 21:06:48
|
hi, A major limitation of Player is that, while it's easy to be a consumer of data (i.e., a client), it's hard to be a producer of data (i.e., a device). If you want to produce data, you must: - write a class extending the Driver class - build your new driver as a plugin or statically into libplayerdrivers - run Player with an appropriate .cfg file I think we can make this a lot easier, and I did a little hacking this morning in this direction. The idea is to allow the user to easily write standalone programs that offer networked access to a device, without actually writing a driver or running Player. Surprisingly, it took only a few modifications to libplayercore to allow this to happen. Attached is an example of a standalone laser device. You can compile it like so: $ g++ -o laser `pkg-config --cflags playertcp` laser.cc `pkg-config -- libs playertcp` Then run it: $ ./laser And attach playerv: $ playerv --laser This simple example shows how you can attach to a port, create a Device *without* a Driver, skip the step of reading a .cfg file, respond to request messages, and publish data (in this case, randomly- generated range scans). And it's only 143 lines. And it doesn't link against libplayerdrivers. Clearly the API can be cleaned up, with some of the boilerplate and common operations rolled into libplayercore. So such a program could be very short indeed. I think this is a big step toward allowing people to build more flexible distributed systems with Player. There are still some issues to be sorted out regarding resource discovery, name service, and definition of new interface / message types, but I think they aren't that hard. I'm beginning to think that we can build peer-to-peer systems by extending our current transport mechanisms, and without moving to a third-party middleware system such as Ice. brian. |