source: trunk/Cocoa/F-Script Anywhere/Source/FSABundle.mm @ 219

Last change on this file since 219 was 153, checked in by Nicholas Riley, 18 years ago

Integrates SCPatch and mach_inject; unfinished, buggy.

File size: 2.6 KB
Line 
1//
2//  FSABundle.mm
3//  F-Script Anywhere
4//
5//  Created by Nicholas Riley on Fri Feb 01 2002.
6//  Copyright (c) 2002 Nicholas Riley. All rights reserved.
7//
8
9/*
10
11 F-Script Anywhere is free software; you can redistribute it and/or modify
12 it under the terms of the GNU General Public License as published by
13 the Free Software Foundation; either version 2 of the License, or
14 (at your option) any later version.
15
16 F-Script Anywhere is distributed in the hope that it will be useful,
17 but WITHOUT ANY WARRANTY; without even the implied warranty of
18 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
19 GNU General Public License for more details.
20
21 You should have received a copy of the GNU General Public License
22 along with F-Script Anywhere; if not, write to the Free Software
23 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
24
25*/
26
27#include <Carbon/Carbon.h>
28#include "SCPatchClient.h"
29#include "SCPatchPrivate.h"
30#include <stdio.h>
31#import "FSAnywhere.h"
32#import "FSAController.h"
33
34class FSAPatchClient : public SCPatchClient
35{
36public:
37    virtual OSErr Initialize(CFStringRef /* clientBundleID */,
38                             CFStringRef /* controllerBundleID */,
39                             pid_t /* pid */);
40    virtual void ReceiveMessage(const AppleEvent * /* theAE */);
41};
42
43OSErr FSAPatchClient::Initialize(CFStringRef clientBundleID,
44                                 CFStringRef controllerBundleID,
45                                 pid_t pid)
46{
47    FSALog(@"client = %@", (NSString *)clientBundleID);
48    FSALog(@"controller = %@", (NSString *)controllerBundleID);
49    [FSAController installMenu];
50    return noErr;
51}
52
53void FSAPatchClient::ReceiveMessage(const AppleEvent *theAE)
54{
55    OSErr err = noErr;
56    Size actualSize;
57    DescType actualType;
58    OSType eventClass, eventID;
59   
60    // XXX is this implementation even necessary?
61    if ( (err = AEGetAttributePtr(theAE, keyEventIDAttr, typeType, &actualType, &eventID,
62                                  sizeof(OSType), &actualSize)) != noErr)
63        return;
64   
65    if ( (err = AEGetAttributePtr(theAE, keyEventClassAttr, typeType, &actualType,
66                                  &eventClass, sizeof(OSType), &actualSize)) != noErr)
67        return;
68   
69    if (eventClass == kSCMessageClass && eventID == kSCPing) {
70        fprintf(stderr, "client received ping: sending reply...\n");
71        SendMessage(mControllerBundleID, NULL, kSCMessageClass, kSCPing, "");
72        fprintf(stderr, "reply sent\n");
73    }
74}
75
76FSAPatchClient FSAPatchClientInstance;
77SCPatchClient *SCPatchClient::sGlobalPatchClientInstance = &FSAPatchClientInstance;
Note: See TracBrowser for help on using the repository browser.