現在、私は object -c で socket.io を扱っており、イベント リクエストの送信に取り組んでいます。私はpkyeck socket.io apiを使用しており、イベントを送信するために、彼が設定した方法で、送信した変数の辞書を取得し、それと一致するsentevent関数で処理される辞書にargs値を入れます引数キー。そのパターンに従うと、socket.io サーバーに送信するイベントは次のようになります。
{"args":[{"username":"yeah", "id":"2"}],"name":"login"}
ただし、サーバーが socket.io 呼び出しを適切に処理するには、呼び出しを次のようにする必要があります。
{"args":["yeah","2"],"name":"login"}
しかし、辞書がそのように設定するような方法で変数を送信することはできません。NSArray を使用すると、リクエストはそのまま送信されます。
{"args":[["yeah","2"]}],"name":"login"}
追加の文字列を送信すると、次のようになります。
{"args":[{"'yeah','2'"}],"name":"login"}
これは私がこれまでに行ったことです
- (void) socketIO:(SocketIO *)socket onMessage:(NSString *)status{
NSLog(@"Current status %@", status);
if([status isEqualToString:@"ready"]){
SocketIOCallback cb = ^(id argsData) {
NSDictionary *response = argsData;
// do something with response
NSLog(@"ack arrived: %@", response);
// test forced disconnect
//[socketIO disconnectForced];
};
NSMutableDictionary *dict = [NSMutableDictionary dictionary];
[dict setObject:@"Yeah" forKey:@"username"];
[dict setObject:@"eqe74squbaah9eqvk7bok3rh09" forKey:@"session"];
[dict setObject:userid forKey:@"user_id"];
NSMutableArray *arr=[NSArray arrayWithObjects:@"Yeah", @"eqe74squbaah9eqvk7bok3rh09", userid, nil];
NSString *eventName=@"'Yeah',";
eventName=[eventName stringByAppendingString:@"'eqe74squbaah9eqvk7bok3rh09',"];
eventName=[eventName stringByAppendingString:@"'"];
eventName=[eventName stringByAppendingString:userid];
eventName=[eventName stringByAppendingString:@"'"];
// NSLog(@"This is the string to be sent %@",eventName);
[socketIO sendEvent:@"login" withData:eventName andAcknowledge:cb];
[socketIO sendEvent:@"subscribe" withData:@"47058" andAcknowledge:cb];
}
これは、socket.io イベント リクエストを送信するメソッドです。
- (void) sendEvent:(NSString *)eventName withData:(id)data andAcknowledge:(SocketIOCallback)function
{
NSMutableDictionary *dict = [NSMutableDictionary dictionaryWithObject:eventName forKey:@"name"];
// do not require arguments
if (data != nil) {
[dict setObject:[NSArray arrayWithObject:data] forKey:@"args"];
}
SocketIOPacket *packet = [[SocketIOPacket alloc] initWithType:@"event"];
packet.data = [SocketIOJSONSerialization JSONStringFromObject:dict error:nil];
packet.pId = [self addAcknowledge:function];
if (function) {
packet.ack = @"data";
}
[self send:packet];
}