Skip to content

Commit

Permalink
uses attributes for objects
Browse files Browse the repository at this point in the history
git-svn-id: https://osctools.svn.sourceforge.net/svnroot/osctools/trunk@24 8d86b230-aa17-0410-9ab0-97cb6adfeffd
  • Loading branch information
remymuller committed Aug 11, 2009
1 parent abc3c16 commit ce4afd7
Show file tree
Hide file tree
Showing 14 changed files with 843 additions and 475 deletions.
30 changes: 3 additions & 27 deletions maxmsp externals/oscbonjour/oscbonjour.xcodeproj/muller.pbxuser
Original file line number Diff line number Diff line change
Expand Up @@ -69,12 +69,8 @@
PBXFileDataSource_Warnings_ColumnID,
);
};
PBXPerProjectTemplateStateSaveDate = 271629791;
PBXWorkspaceStateSaveDate = 271629791;
};
perUserProjectItems = {
45CC344C1030D62F0057043E /* PBXTextBookmark */ = 45CC344C1030D62F0057043E /* PBXTextBookmark */;
45CC344D1030D62F0057043E /* PBXTextBookmark */ = 45CC344D1030D62F0057043E /* PBXTextBookmark */;
PBXPerProjectTemplateStateSaveDate = 271669412;
PBXWorkspaceStateSaveDate = 271669412;
};
sourceControlManager = 45A57D6A0B04F81200FF8034 /* Source Control */;
userBuildSettings = {
Expand Down Expand Up @@ -116,26 +112,6 @@
modificationTime = 271635871.695774;
state = 1;
};
45CC344C1030D62F0057043E /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 56F0EDEB0B04DDAD00FAAA58 /* oscbonjour.cpp */;
name = "oscbonjour.cpp: 269";
rLen = 7;
rLoc = 9314;
rType = 0;
vrLen = 1406;
vrLoc = 6164;
};
45CC344D1030D62F0057043E /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 56F0EDEB0B04DDAD00FAAA58 /* oscbonjour.cpp */;
name = "oscbonjour.cpp: 102";
rLen = 0;
rLoc = 3219;
rType = 0;
vrLen = 1296;
vrLoc = 8260;
};
45EB42961030808500AB8A5C /* Thread.cpp */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {1084, 2842}}";
Expand All @@ -145,7 +121,7 @@
};
45EB42A3103080A600AB8A5C /* maxmspsdk.xcconfig */ = {
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {1090, 546}}";
sepNavIntBoundsRect = "{{0, 0}, {1084, 546}}";
sepNavSelRange = "{0, 0}";
sepNavVisRange = "{0, 1280}";
};
Expand Down
152 changes: 87 additions & 65 deletions maxmsp externals/zeroconf_browser/zeroconf.browser.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,8 @@
#include "zeroconf/NetServiceBrowser.h"
#include "zeroconf/NetService.h"
#include <iostream>
#include <string>
#include <set>

using namespace ZeroConf;

Expand All @@ -38,37 +40,76 @@ class Browser;
struct zeroconf_browser
{
t_object ob; // the object itself (must be first)
t_symbol *type;
t_symbol *domain;
void *out;
Browser *mpBrowser;
};

class Browser : public NetServiceBrowser, public NetServiceBrowserListener
{
zeroconf_browser *mpExternal;

std::set<std::string> mServices;
CriticalSection mCriticalSection; // CriticalSection for shared access to mServices

public:
Browser(zeroconf_browser *x)
: mpExternal(x)
: NetServiceBrowser()
, mpExternal(x)
{
setListener(this);
}


void search(const std::string &type, const std::string &domain)
{
if(!type.empty())
{
stop();
{
ScopedLock lock(mCriticalSection);
mServices.clear();
}
searchForServicesOfType(type, domain);
}
}

private:
virtual void didFindDomain(NetServiceBrowser *pNetServiceBrowser, const std::string &domainName, bool moreDomainsComing) { }
virtual void didRemoveDomain(NetServiceBrowser *pNetServiceBrowser, const std::string &domainName, bool moreDomainsComing) { }

void outputListOfServices()
{
t_atom at[1];
outlet_anything(mpExternal->out, gensym("clear"), 0, NULL);

ScopedLock lock(mCriticalSection);
for(std::set<std::string>::iterator it=mServices.begin(); it != mServices.end(); ++it)
{
atom_setsym(at, gensym(const_cast<char*>(it->c_str())));
outlet_anything(mpExternal->out, gensym("append"), 1, at);
}
}

virtual void didFindService(NetServiceBrowser* pNetServiceBrowser, NetService *pNetService, bool moreServicesComing)
{
t_atom at[1];
atom_setsym(at, gensym(const_cast<char*>(pNetService->getName().c_str())));
outlet_anything(mpExternal->out, gensym("append"), 1, at);
{
ScopedLock lock(mCriticalSection);
mServices.insert(pNetService->getName());
}

if(!moreServicesComing)
outputListOfServices();
}

virtual void didRemoveService(NetServiceBrowser *pNetServiceBrowser, NetService *pNetService, bool moreServicesComing)
{
t_atom at[1];
atom_setsym(at, gensym(const_cast<char*>(pNetService->getName().c_str())));
outlet_anything(mpExternal->out, gensym("delete"), 1, at);
{
ScopedLock lock(mCriticalSection);
mServices.erase(pNetService->getName());
}

if(!moreServicesComing)
outputListOfServices();
}

virtual void willSearch(NetServiceBrowser *pNetServiceBrowser) { }
Expand All @@ -79,36 +120,33 @@ class Browser : public NetServiceBrowser, public NetServiceBrowserListener
//------------------------------------------------------------------------------
t_class *zeroconf_browser_class;

void zeroconf_browser_browse(zeroconf_browser *x, t_symbol *s, long argc, t_atom *argv)
void zeroconf_browser_bang(zeroconf_browser *x)
{
char *type = NULL;
char *domain = "local.";

switch(argc)
{
case 2:
if(argv[1].a_type == A_SYM)
{
domain = atom_getsym(argv+1)->s_name;
}
case 1:
if(argv[0].a_type == A_SYM)
{
type = atom_getsym(argv+0)->s_name;
}
default:
break;
}

if(type != NULL)
{
if(x->mpBrowser)
delete x->mpBrowser;
x->mpBrowser = NULL;

x->mpBrowser = new Browser(x);
x->mpBrowser->searchForServicesOfType(type, domain);
}
x->mpBrowser->search(x->type->s_name, x->domain->s_name);
}

void zeroconf_browser_browse(zeroconf_browser *x, t_symbol *s, long argc, t_atom *argv)
{
bool valid = false;
switch(argc)
{
case 2:
if(argv[1].a_type == A_SYM)
{
x->domain = atom_getsym(argv+1);
}
case 1:
if(argv[0].a_type == A_SYM)
{
valid = true;
x->type = atom_getsym(argv+0);
}
default:
break;
}

if(valid)
zeroconf_browser_bang(x);
}

void zeroconf_browser_assist(zeroconf_browser *x, void *b, long m, long a, char *s)
Expand Down Expand Up @@ -138,31 +176,10 @@ void *zeroconf_browser_new(t_symbol *s, long argc, t_atom *argv)
if (x = (zeroconf_browser *)object_alloc(zeroconf_browser_class))
{
x->out = outlet_new(x, NULL);
x->mpBrowser = NULL;
char *type = NULL;
char *domain = "local";

switch(argc)
{
case 2:
if(argv[1].a_type == A_SYM)
{
domain = atom_getsym(argv+1)->s_name;
}
case 1:
if(argv[0].a_type == A_SYM)
{
type = atom_getsym(argv+1)->s_name;
}
default:
break;
}

if(type != NULL)
{
x->mpBrowser = new Browser(x);
x->mpBrowser->searchForServicesOfType(type, domain);
}
x->type = gensym("");
x->domain = gensym("local.");
x->mpBrowser = new Browser(x);
attr_args_process(x, argc, argv);
}
return (x);
}
Expand All @@ -171,8 +188,13 @@ int main(void)
{
t_class *c = class_new("zeroconf.browser", (method)zeroconf_browser_new, (method)zeroconf_browser_free, (long)sizeof(zeroconf_browser), 0L, A_GIMME, 0);

class_addmethod(c, (method)zeroconf_browser_browse, "browse", A_GIMME, 0);
class_addmethod(c, (method)zeroconf_browser_assist, "assist", A_CANT, 0);
class_addmethod(c, (method)zeroconf_browser_bang, "bang", 0);
class_addmethod(c, (method)zeroconf_browser_bang, "loadbang", 0);
class_addmethod(c, (method)zeroconf_browser_browse, "browse", A_GIMME, 0);
class_addmethod(c, (method)zeroconf_browser_assist, "assist", A_CANT, 0);

CLASS_ATTR_SYM(c, "type", 0, zeroconf_browser, type);
CLASS_ATTR_SYM(c, "domain", 0, zeroconf_browser, domain);

class_register(CLASS_BOX, c); /* CLASS_NOBOX */
zeroconf_browser_class = c;
Expand Down
8 changes: 4 additions & 4 deletions maxmsp externals/zeroconf_browser/zeroconf.browser.maxhelp
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@
, {
"box" : {
"maxclass" : "newobj",
"text" : "zeroconf.service \"Open Sound Control UDP Service\" 4321 _osc._udp",
"text" : "zeroconf.service @name \"Open Sound Control UDP Service\" @port 4321 @type _osc._udp",
"numinlets" : 1,
"numoutlets" : 0,
"id" : "obj-5",
Expand All @@ -61,7 +61,7 @@
, {
"box" : {
"maxclass" : "newobj",
"text" : "zeroconf.service \"Un autre service\" 6666 _osc._udp",
"text" : "zeroconf.service @name \"Un autre service\" @port 6666 @type _osc._udp",
"numinlets" : 1,
"numoutlets" : 0,
"id" : "obj-6",
Expand All @@ -74,7 +74,7 @@
, {
"box" : {
"maxclass" : "newobj",
"text" : "zeroconf.service \"Open Sound Control UDP Service\" 12345 _osc._udp",
"text" : "zeroconf.service @name \"Open Sound Control UDP Service\" @port 12345 @type _osc._udp",
"numinlets" : 1,
"numoutlets" : 0,
"id" : "obj-4",
Expand Down Expand Up @@ -114,7 +114,7 @@
, {
"box" : {
"maxclass" : "newobj",
"text" : "zeroconf.browser _smb._tcp",
"text" : "zeroconf.browser @type _smb._tcp @domain local.",
"numinlets" : 1,
"numoutlets" : 1,
"id" : "obj-1",
Expand Down
Loading

0 comments on commit ce4afd7

Please sign in to comment.