Я пытаюсь преобразовать код, расположенный в Как использовать сигнализатор в службе Android из Java в C # и добились определенного прогресса.Я сейчас застрял на последнем методе.Код java:
private void startSignalR() {
Platform.loadPlatformComponent(new AndroidPlatformComponent());
mInstance.setmHubConnection();
mInstance.setHubProxy();
ClientTransport clientTransport = new ServerSentEventsTransport(mInstance.mHubConnection.getLogger());
SignalRFuture<Void> signalRFuture = mInstance.mHubConnection.start(clientTransport);
try {
signalRFuture.get();
} catch (InterruptedException | ExecutionException e) {
Log.e("SimpleSignalR", e.toString());
return;
}
mInstance.sendMessage(MainActivity.unm,"Hello All!");
String CLIENT_METHOD_BROADAST_MESSAGE = "recievedMessage";
mInstance.mHubProxy.on(CLIENT_METHOD_BROADAST_MESSAGE,
new SubscriptionHandler2<String,LoginInfo>() {
@Override
public void run(final String msg,final LoginInfo loginInfo) {
final String finalMsg = loginInfo.FullName + " says " + loginInfo.Password;
Intent intent = new Intent();
intent.setAction(MY_ACTION);
intent.putExtra("DATAPASSED", finalMsg);
sendBroadcast(intent);
}
}
, String.class,LoginInfo.class);
}
При использовании конвертера java в c # это переводится:
private void startSignalR()
{
Platform.loadPlatformComponent(new AndroidPlatformComponent());
mInstance.setmHubConnection();
mInstance.setHubProxy();
ClientTransport clientTransport = new ServerSentEventsTransport(mInstance.mHubConnection.Logger);
SignalRFuture<Void> signalRFuture = mInstance.mHubConnection.Start(clientTransport);
try
{
signalRFuture.get();
}
catch (Exception e) when (e is InterruptedException || e is ExecutionException)
{
// Log.e("SimpleSignalR", e.ToString());
return;
}
mInstance.sendMessage("", "Hello All!");
string CLIENT_METHOD_BROADAST_MESSAGE = "recievedMessage";
//String CLIENT_METHOD_BROADAST_MESSAGE = "messageReceived";
mInstance.mHubProxy.on(CLIENT_METHOD_BROADAST_MESSAGE, new SubscriptionHandler2AnonymousInnerClass(this)
, typeof(string), typeof(LoginInfo));
}
private class SubscriptionHandler2AnonymousInnerClass : SubscriptionHandler2<string, LoginInfo>
{
private readonly SignalRSrv outerInstance;
public SubscriptionHandler2AnonymousInnerClass(SignalRSrv outerInstance)
{
this.outerInstance = outerInstance;
}
//JAVA TO C# CONVERTER WARNING: 'final' parameters are not available in .NET:
//ORIGINAL LINE: @Override public void run(final String msg,final LoginInfo loginInfo)
public override void run(string msg, LoginInfo loginInfo)
{
//JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
//ORIGINAL LINE: final String finalMsg = loginInfo.FullName + " says " + loginInfo.Password;
string finalMsg = loginInfo.FullName + " says " + loginInfo.Password;
Intent intent = new Intent();
intent.Action = MY_ACTION;
intent.PutExtra("DATAPASSED", finalMsg);
sendBroadcast(intent);
}
}
Это, конечно, вызвало несколько ошибок в Visual Studio 2017.
Сначала строка Platform.loadPlatformComponent(new AndroidPlatformComponent());
сгенерировала ошибку Platform is inaccessible due to its protection level
.Platform
в Xamarin для Visual Studio 2017 действительно защищен и является внутренним классом в System
, и я не могу изменить это, так что я не знаю, как поступить с ним.Эта же строка генерирует ошибку The type or namespace name 'AndroidPlatformComponent' could not be found
, эти ошибки - многочисленные и не неожиданные. Я просто не могу найти эквивалент AndroidPlatformComponent
в Visual Studio 2017, так что я не знаю, как решить эту проблему.
Далее, в этой строке ClientTransport clientTransport = new ServerSentEventsTransport(mInstance.mHubConnection.Logger);
генерирует ошибку The type or namespace name 'ClientTransport' could not be found
, я также не смог найти эквивалент этого, и снова я в растерянности, чтобы продолжить.Также в этой строке .Logger
не определено для соединения с хабом, по-видимому, это .getLogger()
в Java, я не смог найти эквивалент для этого.
Следующая строка SignalRFuture<Void> signalRFuture = mInstance.mHubConnection.Start(clientTransport);' generates the error 1The type or namespace name 'SignalRFuture<>' could not be found
, похоже, что она специфична для SignalR, опять же, я не могу найти эквивалент.
Следующая строка совершенно тупит меня, строка private class SubscriptionHandler2AnonymousInnerClass : SubscriptionHandler2<string, LoginInfo>
генерирует ошибку The type or namespace name 'SubscriptionHandler2<,>' could not be found
.Я везде просматривал онлайн и читал об AnonymousInnerClass, но это не помогло.
Я надеюсь, что пользователи здесь более знакомы с SignalR и различиями между функциональностью c # и функциональностью java.Я совсем не знаком с Java и не знаком с SignalR и службами переднего плана.