File: STDistantConversation.m

package info (click to toggle)
steptalk 0.10.0%2Bgit20200629-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 2,732 kB
  • sloc: objc: 12,182; yacc: 400; makefile: 40; sh: 34; csh: 4; awk: 3; lisp: 3
file content (107 lines) | stat: -rw-r--r-- 2,252 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
/* FIXME: not used! just an unimplemented idea. 
*/
#import "STDistantConversation.h"

#import <Foundation/NSException.h>
#import <Foundation/NSNotification.h>
#import <Foundation/NSConnection.h>
#import <Foundation/NSDistantObject.h>


@implementation STDistantConversation
- initWithEnvironment:(STEnvironment *)env 
             language:(NSString *)langName
{
    if ((self = [super init]) != nil)
    {
        if (!env)
        {
            [NSException raise:@"STConversationException"
                        format:@"Unspecified environment for a distant conversation"];
            [self release];
            return nil;
        }

        if (!langName || [langName isEqual:@""])
        {
            languageName = RETAIN([STLanguage defaultLanguageName]);
        }
        else
        {
            languageName = RETAIN(langName);
        }

        environment = RETAIN(env);
        [self createProxy];
    }

    return self;
}

- (void)dealloc
{
    RELEASE(languageName);
    RELEASE(environment);
    [super dealloc];
}

- (void)setLanguage:(NSString *)newLanguage
{
    [proxy setLanguage:newLanguage];
}

/** Return name of the language used in the receiver conversation */
- (NSString *)language
{
    return [proxy languageName];
}
- (STEnvironment *)environment
{
    return environment;
}
- (id)runScriptFromString:(NSString *)aString
{
    return [proxy runScriptFromString:aString];
}
- (BOOL)isResumable
{
    return YES;
}

- (void)connectionDidDie:(NSNotification *)notification
{
    [[NSNotificationCenter defaultCenter] removeObserver:self];
    proxy = nil;
    NSLog(@"Connection did die");
}

- (BOOL)createProxy
{
    NSConnection *connection;
    
    proxy = [environment createConversationProxy];

    if(!proxy)
    {
        return NO;
    }
    connection = [proxy connectionForProxy];
    
    [[NSNotificationCenter defaultCenter]
                 addObserver: self
                    selector: @selector(connectionDidDie:)
                        name: NSConnectionDidDieNotification 
                      object: connection];
    return YES;
}

- (BOOL)resume
{
    if(proxy)
    {
        NSLog(@"Can not resume: already connected");
        return NO;
    }
    return [self creatProxy];
}
@end