179
- (void) startWithName: (NSString*) name
164
181
NSLog(@"starting tappity server");
183
[serviceName release];
184
serviceName = [name retain];
165
186
myAddress.sin_family = AF_INET; // host byte order
166
187
myAddress.sin_port = htons(1234); // short, network byte order, any port
167
188
myAddress.sin_addr.s_addr = htonl(INADDR_ANY); // auto-fill with my IP
349
case kTapAcceleration:
351
// NSLog(@"RECORDED EVENT");
353
NSArray* accel = [tapDict objectForKey: TapAccelerationKey];
355
UIAccelerometer* accm = [UIAccelerometer sharedAccelerometer];
356
float x = [[accel objectAtIndex: 0] floatValue];
357
float y = [[accel objectAtIndex: 1] floatValue];
358
float z = [[accel objectAtIndex: 2] floatValue];
359
[accm _acceleratedInX: x y: y z: z timestamp: [[accel objectAtIndex: 3] doubleValue]];
330
365
[tapData release];
359
394
- (void) captureScreen
396
NSTimeInterval now = [NSDate timeIntervalSinceReferenceDate];
398
if (now < lastGlUpdate + 2.0*desiredFrameInterval)
401
// return if any gl has been updated at all
361
405
[self performSelectorOnMainThread: @selector(getWindowToCapture) withObject: nil waitUntilDone: NO];
363
407
UIWindow* window = windowToCapture;
365
409
UIImage* img = [self imageFromView: window];
411
lastQuartzUpdate = now;
368
414
[self convertAndSendImage: img];
522
static UIImage* imageFromGLData(NSData* data)
524
// make data provider with data.
525
CGDataProviderRef provider = CGDataProviderCreateWithData(NULL, [data bytes], [data length], NULL);
527
// prep the ingredients
528
int bitsPerComponent = 8;
529
int bitsPerPixel = 32;
530
int bytesPerRow = 4 * 320;
531
CGColorSpaceRef colorSpaceRef = CGColorSpaceCreateDeviceRGB();
532
CGBitmapInfo bitmapInfo = kCGBitmapByteOrderDefault;
533
CGColorRenderingIntent renderingIntent = kCGRenderingIntentDefault;
536
CGImageRef imageRef = CGImageCreate(320, 480, bitsPerComponent, bitsPerPixel, bytesPerRow, colorSpaceRef, bitmapInfo, provider, NULL, NO, renderingIntent);
538
// then make the uiimage from that
539
UIImage *myImage = [UIImage imageWithCGImage:imageRef];
543
static NSData* dataFromGL(void)
545
NSInteger myDataLength = 320 * 480 * 4;
547
NSMutableData* data = [NSMutableData dataWithLength: myDataLength];
549
// allocate array and read pixels into it.
550
void* buffer = [data mutableBytes];
551
glReadPixels(0, 0, 320, 480, GL_RGBA, GL_UNSIGNED_BYTE, buffer);
554
void* rowbuf = calloc(1, bpr);
557
for (size_t i = 0; i < 480/2; ++i)
559
memcpy(rowbuf, buffer + i*bpr, bpr);
560
memcpy(buffer + i*bpr, buffer + (480-i-1)*bpr, bpr);
561
memcpy(buffer + (480-i-1)*bpr, rowbuf, bpr);
574
NSTimeInterval now = [NSDate timeIntervalSinceReferenceDate];
575
if (lastGlUpdate + desiredFrameInterval < now)
577
NSData* rawData = dataFromGL();
578
UIImage* image = imageFromGLData(rawData);
580
NSData* data = UIImagePNGRepresentation(image);
582
[self sendData: data];
590
[[self sharedServer] glGrabPoint];
595
static id sharedInstance = nil;
597
sharedInstance = [[TappityServer alloc] init];
600
return sharedInstance;
605
[serviceName release];
606
[captureTimer invalidate];
607
[capturedImagesCondition release];
608
[capturedImagesQueue release];
477
610
[netService stop];
478
611
[netService release];