Annotation of Examples/DistributedObjects/remoteSpot/Spot.m, revision 1.1

1.1     ! root        1: 
        !             2: #import "Spot.h"
        !             3: #import "Thinker.h"
        !             4: #import <appkit/color.h>
        !             5: 
        !             6: @implementation Spot
        !             7: 
        !             8: // This should return a float between 0 and 1
        !             9: float frandom()
        !            10: {
        !            11:        float val = (random() & 0x7fffffff);
        !            12:        val /= 0x7fffffff;
        !            13:        return val;
        !            14: }
        !            15: 
        !            16: float randBetween(float a, float b)
        !            17: {
        !            18:        float val, scale, t;
        !            19: 
        !            20:        if (a > b)
        !            21:        {       t = a; a = b; b = t;
        !            22:        }
        !            23:        
        !            24:        scale = (b-a);
        !            25:        val = scale * frandom();
        !            26:        return (a + val);
        !            27: }
        !            28: 
        !            29: - init
        !            30: {
        !            31:        float r,g,b;
        !            32:        srandom(time(0));
        !            33:        r = frandom();
        !            34:        g = frandom();
        !            35:        b = frandom();
        !            36:        color = NXConvertRGBToColor(r,g,b);
        !            37:        location.x = randBetween(0,320);
        !            38:        location.y = randBetween(0,220);
        !            39:        isValid = YES;
        !            40:        return self;
        !            41: }
        !            42: 
        !            43: - (NXColor) color
        !            44: {      return color;
        !            45: }
        !            46: 
        !            47: - (NXPoint) location
        !            48: {      return location;
        !            49: }
        !            50: 
        !            51: - (BOOL) setLocation:(NXPoint)pnt
        !            52: {
        !            53:        if (!isValid)
        !            54:        {
        !            55:                [[NXApp delegate] spotDidChange];
        !            56:                return NO;
        !            57:        }
        !            58:        if (pnt.x < -15) pnt.x = -15;
        !            59:        else if (pnt.x > 335) pnt.x = 335;
        !            60:        if (pnt.y < -15) pnt.y = -15;
        !            61:        else if (pnt.y > 235) pnt.y = 235;
        !            62:        location = pnt;
        !            63: 
        !            64:        [[NXApp delegate] spotDidChange];
        !            65:        return YES;
        !            66: }
        !            67: 
        !            68: - (BOOL) doLock
        !            69: {
        !            70:        if (locked) return NO;
        !            71:        locked = YES;
        !            72:        return YES;
        !            73: }
        !            74:        
        !            75: - unlock
        !            76: {
        !            77:        locked = NO;
        !            78:        return self;
        !            79: }
        !            80: 
        !            81: - invalidate
        !            82: {      isValid = NO;
        !            83:        return nil;
        !            84: }
        !            85: 
        !            86: - (BOOL) isValid
        !            87: {      return isValid;
        !            88: }
        !            89: 
        !            90: - encodeRemotelyFor:(NXConnection *)connection
        !            91:        freeAfterEncoding:(BOOL *)flagp
        !            92:        isBycopy:(BOOL)isBycopy
        !            93: {
        !            94:        if (isBycopy) return self;
        !            95:        return [super encodeRemotelyFor:connection
        !            96:                                freeAfterEncoding:flagp
        !            97:                                isBycopy:isBycopy];
        !            98: }
        !            99: 
        !           100: - encodeUsing:(id <NXEncoding>)portal
        !           101: {
        !           102:        //xxx should encode valid flag
        !           103: 
        !           104:        float r,g,b;
        !           105:        NXConvertColorToRGB(color, &r, &g, &b);
        !           106:        [portal encodeData:&location.x ofType:"f"];
        !           107:        [portal encodeData:&location.y ofType:"f"];
        !           108: 
        !           109:        [portal encodeData:&r ofType:"f"];
        !           110:        [portal encodeData:&g ofType:"f"];
        !           111:        [portal encodeData:&b ofType:"f"];
        !           112: 
        !           113:        return self;
        !           114: }
        !           115: 
        !           116: - decodeUsing:(id <NXDecoding>)portal
        !           117: {
        !           118:        float r,g,b;
        !           119:        NXPoint p;
        !           120:        NXColor c;
        !           121: 
        !           122:        [portal decodeData:&p.x ofType:"f"];
        !           123:        [portal decodeData:&p.y ofType:"f"];
        !           124: 
        !           125:        [portal decodeData:&r ofType:"f"];
        !           126:        [portal decodeData:&g ofType:"f"];
        !           127:        [portal decodeData:&b ofType:"f"];
        !           128: 
        !           129:        c = NXConvertRGBToColor(r,g,b);
        !           130: 
        !           131:        // [self init]; //not really necessary in this case...
        !           132:        color = c;
        !           133:        location = p;
        !           134: 
        !           135:        return self;
        !           136: }
        !           137: 
        !           138: - (unsigned) references
        !           139: {
        !           140:        return refs;
        !           141: }
        !           142: 
        !           143: - addReference
        !           144: {
        !           145:        refs++;
        !           146: //     printf("Spot: adding reference, refs = %d\n",(int)refs);
        !           147:        return self;
        !           148: }
        !           149: 
        !           150: - free
        !           151: {
        !           152:        refs--;
        !           153: //     printf("Spot: decrementing reference, refs = %d\n", (int)refs);
        !           154:        if (refs > 0) return self;
        !           155: 
        !           156: //     printf("Spot: ...and freeing\n");
        !           157: 
        !           158:        // this cleans up remote connections that still have refs to theSpot
        !           159:        [NXConnection removeObject:self];
        !           160: 
        !           161:        return [super free];
        !           162: }
        !           163: 
        !           164: @end
        !           165: 
        !           166: 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.