Skip to content

2bbb/ofxPubSubOsc

Repository files navigation

ofxPubSubOsc

easy utility for publish/subscribe OSC message.

Dependencies

  • ofxOsc

Notice

  • this addon is tested with oF0.9.8~
  • if you use oF0.9.0~, then you can use std::function<void(ofxOscMessage &)>! detail: API Reference
  • if you use oF~0.8.4, then you can use branch:v0_1_x_oF084
  • if you have challange spirit, please use dev/vX.Y.Z branch.
  • if you want to join development ofxPubSubOsc, open the issue and post the PR for dev/vX.Y.Z.

TOC

class ofApp : public ofBaseApp {
	int foo;
	ofColor c;
	ofPoint p;
public:
	void setup() {
		ofxSubscribeOsc(9005, "/foo", foo);
		ofxSubscribeOsc(9005, "/color", c);
		ofxSubscribeOsc(9005, "/p", p);
		
		ofxPublishOsc("localhost", 9006, "/fps", &ofGetFrameRate);
		
		ofxSubscribeOsc(9005, "/lambda", [](const std::string &str){
			ofLogNotice() << "receive " << str;
		});
		ofxSubscribeOsc(9005, "/trigger_event", [](){
			ofLogNotice() << "receive trigger_event";
		});
	}
	
	void update() {
		// do NOTHING about OSC on update!!!
	}
	
	void draw() {
		ofSetColor(c);
		ofDrawCircle(p, 5);
	}
};

API Reference is imperfect now.

If you want to use advanced features, see Advanced

  • void ofxSubscribeOsc(int port, const string &address, SupportedType &value);

bind a value to the argument(s) of OSC messages with an address pattern address incoming to port.

  • ofxUnsubscribeOsc(int port, const string &address);

unbind from OSC messages with an address pattern address incoming to port.

  • ofxUnsubscribeOsc(int port);

unbind from OSC messages with any address patterns incoming to port.

  • void ofxPublishOsc(const string &ip, int port, const string &address, SupportedType &value, bool whenValueIsChanged = true);

publish value as an OSC message with an address pattern address to ip:port every time the value has changed. If whenValueIsChanged is set to false, then the binded value is sent every frame after App::update.

  • void ofxUnpublishOsc(const string &ip, int port, const string &address);

unbind a publisher sending OSC message with an address pattern address to ip:port.

  • void ofxUnpublishOsc(const string &ip, int port);

unbind all the publishers sending to ip:port.

  • void ofxRegisterPublishingOsc(const string &ip, int port, const string &address, SupportedType &value)
  • void ofxPublishRegisteredOsc(const string &ip, int port, const string &address)

register value as an OSC message with an address pattern address to ip:port. and publish when call ofxPublishRegisteredOsc(ip, port, address).

  • void ofxUnregisterPublishingOsc(const string &ip, int port, const string &address)

unregister OSC message with an address pattern address to ip:port.

  • void ofxUnregisterPublishingOsc(const string &ip, int port)

unregister all the messages sending to ip:port.

NOTE: registable type is same to ofxPublishOsc. see more ofxPublishOsc.

  • void ofxSendOsc(const string &ip, int port, const string &address, Arguments && ... arguments)
  • Arithmetic is any type of Int32, Int64 or Float
  • bool (published as Int32)
  • unsigned char, char (published as Int32)
  • unsigned short, short (published as Int32)
  • unsigned int, int (published as Int32 or Int64 (if sizeof(int) == 8 then Int64))
  • unsigned long, long (published as Int64 or Int64 (if sizeof(int) == 8 then Int64))
  • unsigned long long, long long (published as Int64)
  • float (published as Float)
  • double (published as Float)

NOTE: long double is not guaranteed

  • string

Arithmetic[2]

  • ofVec2f (published as Float * 2)

Arithmetic[3]

  • ofVec3f (= ofPoint) (published as Float * 3)

Arithmetic[4]

  • ofVec4f (published as Float * 4)
  • ofColor (published as Int32 * 4)
  • ofShortColor (published as Int32 * 4)
  • ofFloatColor (published as Float * 4)
  • ofQuaternion (published as Float * 4)
  • ofRectangle (published as Float * 4)

Arithmetic[9]

  • ofMatrix3x3 (published as Float * 9)

Arithmetic[16]

  • ofMatrix4x4 (publish as Float * 16)

Blob

  • ofBuffer
  • ofParameter<SupportedType>

NOTE: we only support subscribing ofParameterGroup. See How to subscribe ofParameterGroup

  • SupportedType[size]
  • vector<SupportedType>

if you use vector<SomeType> vec;, when vec will be resized every receiving OSC messages.

NOTE: do NOT use vector<vector<SupportedType>>, vector<SupportedType>[size]

Subscribe

  • std::function<R(Arguments ...)>;
  • std::function<R(ofxOscMessage &)>
  • pair of U &that, T (U::\*callback)(Arguments ...);
  • pair of U \*that, T (U::\*callback)(Arguments ...);

Arguments ... are all of types we can use in

Publish

  • std::function<T()>;
  • pair of U &that, T (U::\*callback)();
  • pair of U \*that, T (U::\*callback)();

2021/09/30 ver 0.3.3

  • fixed bug on ver 0.3.2 (issued by hanasaan. thanks!!!)

2021/09/26 ver 0.3.2 [Deprecated!!]

  • fixed constructor of ofxOscMessageEx
  • fixed some constness about notify, read

2020/04/15 ver 0.3.1

  • added ofxSubscribeAllOsc, ofxSubscribeAllOscForPort

2018/05/08 ver 0.3.0

  • refactor all for C++11
  • add ofxSendOsc
  • ofxSubscribeOsc got more flexible.
    • multi arguments
    • multi arguments callback
  • add ofxOscMessageEx

about Versioning

ofxPubSubOsc uses Mood Versioning. maybe, 1.0.0. will not come.

MIT License.

  • ISHII 2bit [ISHII Tsuubito Program Office]
  • i[at]2bit.jp

Please create a new issue if there is a problem.

And please throw a pull request if you have a cool idea!!

If you get happy with using this addon, and you're rich, please donation for support continuous development.

Bitcoin: 17AbtW73aydfYH3epP8T3UDmmDCcXSGcaf