2015-04-07 12 views
9

Bir SignalR hub'ımız var. Aşağıdaki jQuery kodu, Cordova üzerinde SignalR istemcisi "çağrısı" olaylarını başarıyla bağlayıp doğru şekilde işler. Ben SignalR Java Client kullanarak java android bu kodu taklit çalıştığınızdajquery signalr istemcisi çalışır ancak java'da çalışmak için kullanılamaz

 var connectionURL = "https://SOMEURL.azurewebsites.net/message"; 
     connection = $.connection(connectionURL); 

     connection.start().done(function() { 
      console.log("Connected to hub again"); 
     }); 

     connection.disconnected(function() { 
      setTimeout(function() { 
       connection.start().done(function() { 
        console.log("Disconnected and Connected to hub again"); 
       }); 
      }, 5000); 
     }); 

     connection.stateChanged(function (change) { 
      if (change.newState == $.signalR.connectionState.reconnecting) { 
      } 
      else if (change.newState == $.signalR.connectionState.connected) { 
      } 
      else if (change.newState == $.signalR.connectionState.disconnected) { 
      }// else if 
     }); 

     connection.received(function (data) { 
      connectId = connection.id + ""; 
      console.log("onDeviceReady run"); 

      // call the function to parse the data 
      if (data.PayloadType == "Dispatch") { 
       dataDispatch(data); 
      } 
      if (data.PayloadType == "ConnectionAcknowledge") { 
       sendConnectionAcknowledge(data); 
      } 
     }); 

Ancak, günlük çıkış (ton) bir sürü almak ve hiçbir bağlantı hiç bitirir. awaitConnection.get(); numaralı satırdaki hata ayıklama kadar uzağa gider ve ikinci satır hata satırını yazdırmaz, bunun yerine sonsuz (binlerce) yarı anlamsız satırlar yazdırır (bu, borulama değil, bir çeşit "SSL tokalaşması" gibi bir şeydir, ancak defalarca aynı şeyi günlüğü şey ama, çok garip) yine de hiçbir zaman "benim" debug 2. hattını çalıştırır

package com.some.thing; 

import android.util.Log; 

import java.util.concurrent.ExecutionException; 

import microsoft.aspnet.signalr.client.Platform; 
import microsoft.aspnet.signalr.client.SignalRFuture; 
import microsoft.aspnet.signalr.client.http.android.AndroidPlatformComponent; 
import microsoft.aspnet.signalr.client.hubs.HubConnection; 
import microsoft.aspnet.signalr.client.hubs.HubProxy; 
import microsoft.aspnet.signalr.client.hubs.SubscriptionHandler1; 

public class SignalRClient { 

    public static void startConnection() { 

     Platform.loadPlatformComponent(new AndroidPlatformComponent()); 
     String host = "https://SOMEURL.azurewebsites.net/message"; 
     HubConnection connection = new HubConnection(host); 
     HubProxy hub = connection.createHubProxy("IDoNoHaveThisNorKnowIt"); 

     SignalRFuture<Void> awaitConnection = connection.start(); 
     try { 
      Log.v("CONANSignalR :=", "CONNECTING"); 
      awaitConnection.get(); 
      Log.v("CONANSignalR :=", "CONNECTED"); 
     } catch (InterruptedException e) { 
      // Handle ... 
     } catch (ExecutionException e) { 
      // Handle ... 
     } 

     hub.on("IDoNotKnowThisEither", new SubscriptionHandler1<String>(){ 
      @Override 
      public void run(String status){ 
       Log.v("CONANDispatch :=", status); 
      } 
     }, String.class); 
    } 
} 

kimse bana kullanışlı java istemci koduna çalışma, jQuery SignalR istemci kodu çevirmek yardımcı olabilir misiniz? Merkezde herhangi bir bilgi yok, böylece vekil veya fonksiyon isimlerini bile bilmiyorum, her şeyi görmek istiyorum (jQuery gibi).

DÜZENLEME

şeyleri test etmek için, ben bu bu ne olduğunu ne zaman şimdi

console.log("SignalR Raw Data:" + JSON.stringify(data)); 

diyor

console.log("onDeviceReady run"); 

söylemek kullanmak benim orijinal jquery kodu değiştirmiş jquery,

SignalR Raw Data:{"ConnectionId":"9c4b4ba5-cb6e-4dcb-8df9-069cbf749873","OrderId":null,"SenderId":null,"PayloadType":"ConnectionAck","Message":"Welcome, you are connected to the Hub!","Payload":null,"Initiator":"HUB","Version":null} 
'i döndürür

ancak bunların hiçbiri "RAW mesaj aldım:" metin yani

connection.received(new MessageReceivedHandler() { 
    @Override 
    public void onMessageReceived(JsonElement json) { 
     System.out.println("RAW received message: " + json.toString()); 

     // ADD HANDLING OF RECEIVED IN HERE 
    } 
}); 

eşdeğer java içinde görünen Eğer göbek adını bilmiyorum beri tüm

+0

Biliyorum ki, @drax'ın yanıtı çok yardımcı oldu, ancak soruya cevap veremedi ve kabul edildi, ve zaten eriştiğim bir bağlantıya dayanıyordu (şu anda bağlantı yok Merkez onun tavsiyesini takiben meydana geldi) ama yine de ona otomatik olarak gönderilecekmiş gibi görünüyor. – user26676

cevap

3

de görünmüyor, etmelisin Doğrudan bağlantı nesnesindeki tanıtıcı olayları kullanın (js istemcisinde yaptığınız gibi). İşte

(sadece kafamın üstünden yazılı not, bu test edilmemiştir) başlamak olabilir örnek kod: Ayrıca

public static void startConnection() { 

    Platform.loadPlatformComponent(new AndroidPlatformComponent()); 
    String host = "https://SOMEURL.azurewebsites.net/message"; 
    HubConnection connection = new HubConnection(host); 

    // subscribe to received - equal to `connection.received(function (data)` from javascript 
    connection.received(new MessageReceivedHandler() { 

     @Override 
     public void onMessageReceived(JsonElement json) { 
      System.out.println("RAW received message: " + json.toString()); 

      // ADD HANDLING OF RECEIVED IN HERE 
     } 
    }); 

    // equal to `connection.disconnected(function()` from javascript 
    connection.closed(new Runnable() { 

     @Override 
     public void run() { 
      // ADD CODE TO HANDLE DISCONNECTED EVENT 
     } 
    }); 

    // equal to `connection.stateChanged(function (change)` 
    connection.stateChanged(new StateChangedCallback() { 

     @Override 
     public void stateChanged(ConnectionState oldState, ConnectionState newState) { 
      // ADD CODE TO HANDLE STATE CHANGES 
     } 
    }); 

    // start the connection 
    connection.start() 
     .done(new Action<Void>() { 

      @Override 
      public void run(Void obj) throws Exception { 
       System.out.println("Connected"); 
      } 
     }); 
} 

, sana java için örnek sohbet istemcisi kontrol etmek tavsiye hangi Buradan ulaşabilirsiniz: https://github.com/SignalR/java-samples/blob/master/signalr-sample-chat/src/microsoft/aspnet/signalr/samples/chat/Program.java

Gönderdiğim kodların çoğu buna dayanmaktadır.

+0

teşekkürler @drax Değişiklikleri yaptım, sonuçta yaptığım düzenleme var, bu kesinlikle bir gelişmedir. ama "aldım" – user26676

+0

bir şey ateş etmiyor, aklıma geliyor ki, java örneğindeki 'bağlantı 'nesnesi' startConnection' işlevinin sonunda kapsam dışıdır (ve toplanmış olabilir). Muhtemelen program çapında (statik veya benzeri) bir değişkene atamalısınız. – drax

+0

teşekkürler @drax, evet, global kapsam/GC konularına muazzam bir şekilde baktığımda baktım, sonuçsuz kaldı, eğer buna bakacak olsaydınız, zamanınız için size karşılık vermek isterdim?benim e-posta conanman _at_ live _dotco_dotuk benim zamanımın 6 gününü aldı, ama eminim ki gözden kaçırdığım bir şey, küçük bir sorun. Eğer (android stüdyo) – user26676

İlgili konular