SignalR android 客户端不能有两个以上的 AddMessage 订阅
SignalR android client can not have more than two AddMessage subscriptions
我正在尝试在桌面(C# - WinForms)和 Android 之间使用 SignalR 创建一个聊天应用程序。
我的 Hub
中有两种方法:
public void Send(string name, string message)
{
Clients.All.addMessage(name, message);
}
public void SendAnswer(string from, string requestWas, string answer)
{
Clients.All.addMessage(from, requestWas, answer);
}
在我的 android 应用程序客户端中,我通过单击按钮连接到服务器,然后在按钮单击处理程序中定义了这两个 AddMessage
订阅:
mProxy.on("AddMessage", new SubscriptionHandler2<String, String>() {
@Override
public void run(final String p1, final String p2) {
runOnUiThread(new Runnable() {
@Override
public void run() {
mTvContent.append(p1 + ":\t" + p2);
}
});
}
}, String.class, String.class);
mProxy.on("AddMessage", new SubscriptionHandler3<String, String, String>() {
@Override
public void run(final String p1, final String p2, final String p3) {
runOnUiThread(new Runnable() {
@Override
public void run() {
mTvContent.append("-- " + p1 + " --\t" + p2 + ":\t" + p3);
}
});
}
}, String.class, String.class, String.class);
如果我使用 HUB 的 Send
方法,它工作正常(请注意它有 2 个参数,因此 android 代码中的第一个 AddMessage
订阅。例如:
mProxy.invoke("Send", new String[]{"MobileClient", "Connected"});
工作正常,现在如果我对集线器的 SendRequest
执行某些操作,它不会在 android 客户端(订阅 3 个字符串的客户端)上打印任何内容。例如:
mProxy.invoke("SendRequest", new String[]{ComConstants.MOBILE_CLIENT,
ComConstants.LOCAL_CLIENT,
ReqConstants.NEW_REQ});
但是如果我删除带有 2 个字符串的订阅,带有 3 个字符串的订阅就可以正常工作并将 SendAnswer
结果打印到 android 文本框。
我的意思是,为什么 SubscriptionHandler2
和 SubscriptionHandler3
不能同时工作?如果我注释掉 SubscriptionHandler2
,那么 SubscriptionHandler3
就可以正常工作。
有线索吗?也许我在这里做错了什么?
好的....我想我应该学习更多关于动态和反射的知识....
我所要做的就是对我的 C# 集线器进行以下更改:
public void SendAnswer(string from, string requestWas, string answer)
{
Clients.All.sendAnswer(from, requestWas, answer);
}
请注意 addMessage
现在更改为 sendAnswer
!
我正在尝试在桌面(C# - WinForms)和 Android 之间使用 SignalR 创建一个聊天应用程序。
我的 Hub
中有两种方法:
public void Send(string name, string message)
{
Clients.All.addMessage(name, message);
}
public void SendAnswer(string from, string requestWas, string answer)
{
Clients.All.addMessage(from, requestWas, answer);
}
在我的 android 应用程序客户端中,我通过单击按钮连接到服务器,然后在按钮单击处理程序中定义了这两个 AddMessage
订阅:
mProxy.on("AddMessage", new SubscriptionHandler2<String, String>() {
@Override
public void run(final String p1, final String p2) {
runOnUiThread(new Runnable() {
@Override
public void run() {
mTvContent.append(p1 + ":\t" + p2);
}
});
}
}, String.class, String.class);
mProxy.on("AddMessage", new SubscriptionHandler3<String, String, String>() {
@Override
public void run(final String p1, final String p2, final String p3) {
runOnUiThread(new Runnable() {
@Override
public void run() {
mTvContent.append("-- " + p1 + " --\t" + p2 + ":\t" + p3);
}
});
}
}, String.class, String.class, String.class);
如果我使用 HUB 的 Send
方法,它工作正常(请注意它有 2 个参数,因此 android 代码中的第一个 AddMessage
订阅。例如:
mProxy.invoke("Send", new String[]{"MobileClient", "Connected"});
工作正常,现在如果我对集线器的 SendRequest
执行某些操作,它不会在 android 客户端(订阅 3 个字符串的客户端)上打印任何内容。例如:
mProxy.invoke("SendRequest", new String[]{ComConstants.MOBILE_CLIENT,
ComConstants.LOCAL_CLIENT,
ReqConstants.NEW_REQ});
但是如果我删除带有 2 个字符串的订阅,带有 3 个字符串的订阅就可以正常工作并将 SendAnswer
结果打印到 android 文本框。
我的意思是,为什么 SubscriptionHandler2
和 SubscriptionHandler3
不能同时工作?如果我注释掉 SubscriptionHandler2
,那么 SubscriptionHandler3
就可以正常工作。
有线索吗?也许我在这里做错了什么?
好的....我想我应该学习更多关于动态和反射的知识....
我所要做的就是对我的 C# 集线器进行以下更改:
public void SendAnswer(string from, string requestWas, string answer)
{
Clients.All.sendAnswer(from, requestWas, answer);
}
请注意 addMessage
现在更改为 sendAnswer
!