Annotation of Examples/DistributedObjects/remoteSpot/Spot.m, revision 1.1.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.