首先.從github上把pomelo-ios Client (https://github.com/NetEase/pomelo-iosclient)下載下來,並且將其依賴的第三方庫socket.io-Objc和SocketRocket一併下載下來。
然後.新建一個Cocos2d的xcode項目,將這三個庫的文件導入。並且將SocketRocket依賴的lib添加進來。
相信做過pomelo的iOS客戶端的這兩步很easy。如果這兩步有什麼問題可以在這片博文下問我。在我寫這篇博文的時候SocketRocket暫時還部支持iOS6,所以項目的development target 建議設爲5.1
接下來是把pomelo放到AppDelegate裏面
AppDelegate.h
#import <UIKit/UIKit.h>
#import "Pomelo.h"
@class RootViewController;
@interface AppDelegate : NSObject <UIApplicationDelegate,PomeloDelegate> {
UIWindow *window;
RootViewController *viewController;
}
@property (nonatomic) UIWindow *window;
@property (strong, nonatomic) Pomelo *pomelo;
@end
AppDelegate.m
這個文件代碼太多,就只貼添加的兩行代碼。由於Cocos2d中的Layer不能做alloc,init操作,所以不能像iOS Client那樣在AppDelegate中把pomelo賦給一個Controller,然後一個個Controller相互把傳遞傳遞下去(因爲一個工程只能有pomelo實例,你可以把pomelo看成單例,但是網易沒有設計成單例,考慮到以後可能會有多個實例的設計,記住,pomelo只要實例化一次就好)
@synthesize pomelo;
在applicationDidFinishLaunching中
pomelo = [[Pomelo alloc] initWithDelegate:self];
然後在Layer中就可以直接實例化然後發送請求。
也需要#import @property之類的把pomelo文件先導進來
實例化:
AppDelegate *myDelegate = [[UIApplication sharedApplication] delegate];
pomelo = myDelegate.pomelo;
[pomelo connectToHost:@"127.0.0.1" onPort:3014 withCallback:^(Pomelo *p){
NSLog(@"after connectToHost------------");
NSDictionary *params = [NSDictionary dictionaryWithObject:@"chenyl107" forKey:@"uid"];
[pomelo requestWithRoute:@"gate.gateHandler.queryEntry" andParams:params andCallback:^(NSDictionary *result){
NSLog(@"after gate-----------");
[pomelo disconnectWithCallback:^(Pomelo *p){
// [self entryWithData:result];
host = [result objectForKey:@"host"];
port = [[result objectForKey:@"port"] intValue];
NSLog(@"%@",host);
NSLog(@"%d",port);
//連接得到的connection服務器
[pomelo connectToHost:host onPort:port withCallback:^(Pomelo *p){
NSDictionary *params = [NSDictionary dictionaryWithObjectsAndKeys:
name, @"username",
channel, @"rid",
nil];
[p requestWithRoute:@"connector.entryHandler.enter" andParams:params andCallback:^(NSDictionary *result){
NSArray *userList = [result objectForKey:@"users"];
for (NSString *name1 in userList) {
NSLog(@"%@",name1);
//只是爲了看一下該頻道里有多少人
}
}];
}];
}];
}];
}];
簡單分析下:connectToHost是與服務器建立長連接,建立好後發送一個request請求到gate服務器,gate服務器將分配給用戶的connect服務器的host,port發送給客戶端,客戶端這個時候要斷開與gate的連接,然後去連接connect服務器,然後對connect服務器發送一個request請求。然後接受connect返回的數據。
等過了期末考試再總結下從一個pomelo新建的helloworld程序怎麼完善成一個從數據庫到服務器再到客戶端的完整的小小小demo。待續。。。。