Состояния сообщения Сбой ответ для Action Cable на iOS - PullRequest
0 голосов
/ 02 июля 2019

Я пытаюсь подключиться к каналу с идентификатором комнаты и с помощью действия onReceive, которое я ожидаю получить некоторые данные. Я сделал это на Android и прекрасно работает, но на iOS это всегда дает мне неудачный ответ. Я пытался преобразовать свой код Android в iOS, но я не уверен, что что-то упустил. Ниже мой метод Android, который работает.

private void subscribe() throws URISyntaxException {
    URI uri = new URI("wss://mycompany.com/cable");
     Consumer.Options options=new Consumer.Options();
    options.headers = new ArrayMap<>();
    options.headers.put("Origin","https://mycompany.com");
    Consumer consumer = ActionCable.createConsumer(uri,options);
   // 2. Create subscription
    Channel appearanceChannel = new Channel("RoomChannel");
    appearanceChannel.addParam("room_id",randomString);
    Subscription subscription = consumer.getSubscriptions().create(appearanceChannel);
    subscription
            .onConnected(new Subscription.ConnectedCallback() {
                @Override
                public void call() {
                    // Called when the subscription has been successfully completed
                }
            }).onRejected(new Subscription.RejectedCallback() {
        @Override
        public void call() {
            // Called when the subscription is rejected by the server
        }
    }).onReceived(new Subscription.ReceivedCallback() {
        @Override
        public void call(JsonElement data) {
            //I get the data response here
            return;
        }
    }).onDisconnected(new Subscription.DisconnectedCallback() {
        @Override
        public void call() {
            // Called when the subscription has been closed
        }
    }).onFailed(new Subscription.FailedCallback() {
        @Override
        public void call(ActionCableException e) {
            // Called when the subscription encounters any error
        }
    });
    // 3. Establish connection
    try {
        consumer.connect();
 // 4. Perform any action
  subscription.perform("away");

 // 5. Perform any action using JsonObject(GSON)
    JsonObject params = new JsonObject();
    params.addProperty("foo", "bar");
    subscription.perform("appear", params);
    }catch (Exception e)
    {
   Log.e("------error",e);
    }
}

Это мой метод iOS

let url = "wss://mycompany.com/cable"
let ChannelIdentifier = "RoomChannel"

func setupActionCable(){

        guard let urlString = URL(string: url) else {return}

        let headers = ["Origin":"https://mycompany.com"]

        self.client = ActionCableClient(url: urlString, headers:headers)

        self.client?.willConnect = {
            print("Will Connect")
        }

        self.client?.onConnected = {
            print("Connected to \(String(describing: self.client?.url))")
        }

        self.client?.onDisconnected = {(error: ConnectionError?) in
            print("Disconected with error: \(String(describing: error))")
        }

        self.client?.willReconnect = {
            print("Reconnecting to \(String(describing: self.client?.url))")
            return true
        }

    }

    func subscribe(_ roomId:String){


        let room_identifier = ["room_id" : roomId]
        self.channel = client?.create(ChannelIdentifier, identifier: room_identifier)

        self.channel?.onSubscribed = {
            print("Subscribed to \(self.ChannelIdentifier) with room Id = \(roomId)")
        }

        self.channel?.onReceive = {(data: Any?, error: Error?) in

            print("****** channel response data = \(String(describing: data))")
            if let error = error {
                print(error.localizedDescription)
                return
            }

        }

    }

Я звоню setupActionCable на viewDidLoad, и после этого, когда я получаю roomId, я звоню на subscribe с roomId. Но здесь я всегда получаю ответ как

message =     {
        state = FAILED;
    };

Но в Android я получаю ответ json в сообщении. Я не уверен, что мне здесь не хватает при конвертации в iOS. Любая помощь приветствуется.

PS: я имею в виду это для Android и это для iOS.

...