This is RemoteCommand.m in view mode; [Download] [Up]
// ------------------------------------------------------------------------------------- // RemoteCommand // ------------------------------------------------------------------------------------- // Permission is granted to freely redistribute this source code, and to use fragments // of this code in your own applications if you find them to be useful. This class, // along with the source code, come with no warranty of any kind, and the user assumes // all responsibility for its use. // ------------------------------------------------------------------------------------- #import <appkit/appkit.h> #import <libc.h> #import <stdlib.h> #import <string.h> #import <c.h> #import <pwd.h> #import <sys/param.h> #import <sys/types.h> #import <sys/time.h> #import <sys/dir.h> #import <remote/NXConnection.h> #import "RemoteCommand.h" #import "ExecServer.h" #import "userInfo.h" #import "AskOperator.h" #import "ExecMonitor.h" // ------------------------------------------------------------------------------------- // return path to application ("/appName" is removed from path) // Note: This should be called at the beginning of the app to cache the app path name const char *XAppPath() { static char *appPathName = (char*)nil; if (!appPathName) { char *p, path[MAXPATHLEN + 1]; if (NXArgv[0][0] == '/') strcpy(path, NXArgv[0]); else { getwd(path); strcat(path, "/"); strcat(path, NXArgv[0]); } if ((p = rindex(path, '/')) && (p != path)) *p = 0; appPathName = strcpy((char*)malloc(strlen(path) + 1), path); } return appPathName; } // ------------------------------------------------------------------------------------- @interface _RmtMethods : Object - (const char*)getResponseForMessage:(askOperator_t*)ao; @end // ------------------------------------------------------------------------------------- @implementation RemoteCommand // ------------------------------------------------------------------------------------- // create new ExecMonitor // ------------------------------------------------------------------------------------- /* "Continue" select from NewExecMonitor panel (or "Cancel" if tag != 0) */ - newExecOk:sender { [newExecWindow orderOut:self]; if (![sender tag]) { const char *host = [newExecHost stringValue], *server = [newExecServer stringValue]; if (![ExecMonitor newExecHost:host server:server]) { char *errMsg = "Unable to connect to server name \"%s\" on host \"%s\". " "'RemoteRunServer' may not have run successfully."; NXRunAlertPanel("Error", errMsg, "Continue",0,0, server, host); } } return self; } /* new monitor */ - newExecMonitor:sender { char localHost[MAXHOSTNAMELEN + 1], serverName[256]; gethostname(localHost, sizeof(localHost)); sprintf(serverName, "ExecServer_%s_%d", localHost, getpid()); [newExecServer setStringValue:serverName]; [newExecHost setStringValue:""]; [newExecWindow center]; [newExecWindow makeKeyAndOrderFront:(id)nil]; return self; } // ------------------------------------------------------------------------------------- // menu actions // ------------------------------------------------------------------------------------- /* application termination */ - terminate:sender { return [super terminate:sender]; } // ------------------------------------------------------------------------------------- // app name info // ------------------------------------------------------------------------------------- - (const char*)appUserName { return appUserName; } - (const char*)appUserHome { return appUserHome; } - (const char*)appServerHost { return appServerHost; } - (const char*)appServerName { return appServerName; } // ------------------------------------------------------------------------------------- // application initialization // ------------------------------------------------------------------------------------- /* application initialization */ - appDidInit:sender { id rmtMethods; char userName[256], userHome[MAXPATHLEN + 1]; char host[MAXHOSTNAMELEN + 1], server[256]; /* run-time initialization */ XAppPath(); /* get user name */ if (!XMyUserName(userName) || !XUserHomeDirectory(userName, userHome)) { NXLogError("[RemoteCommand] Unable to get current user name/home"); [self terminate:(id)nil]; exit(2); } appUserName = NXCopyStringBuffer(userName); appUserHome = NXCopyStringBuffer(userHome); /* remote methods object for _askop (never freed) */ rmtMethods = [[_RmtMethods alloc] init]; /* get serverName and register for _askop server */ gethostname(host, sizeof(host)); appServerHost = NXCopyStringBuffer(host); sprintf(server, "%s_%s_%d", ASK_SERVER, appServerHost, getpid()); appServerName = NXCopyStringBuffer(server); [[NXConnection registerRoot:rmtMethods withName:appServerName] runFromAppKit]; /* new exec monitor */ [self newExecMonitor:self]; return self; } @end // ------------------------------------------------------------------------------------- // Remote methods (called by '_askop') // ------------------------------------------------------------------------------------- @implementation _RmtMethods /* show panel and get user response */ - (const char*)getResponseForMessage:(askOperator_t*)ao { return [AskOperator showAskPanel:ao]; // free ao ? } @end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.