自己構建pomelo的Cocos2d-iPhone Client

首先.從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。待續。。。。


        

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章