استفاده از SignalR در اندروید
نویسنده: سیروان عفیفی
تاریخ: ۱۳۹۳/۰۷/۲۱ ۱۳:۲۵
آدرس: www.dntips.ir
| مطالب | ۳۶۹۴ |
| نویسندگان | ۲۷۶ |
| گروههای مطالب | ۱۰۲۴ |
| نقشههای راه | ۱۱۹ |
| دورهها | ۱۴ |
| اشتراکها | ۱۷۹۱۴ |
public class ChatHub : Hub
{
public void Send(string name, string message)
{
Clients.All.messageReceived(name, message);
}
}
قدم بعدی افزودن کدهای سمت کلاینت برای SignalR میباشد. دقت داشته باشید که کدهایی که در ادامه مشاهده خواهید کرد دقیقاً مطابق دستورالمعلهایی است که قبلاً مشاهده کردهاید. برای اینکار داخل کلاس MainActivity.java کدهای زیر را اضافه کنید:
Platform.loadPlatformComponent( new AndroidPlatformComponent() );
HubConnection connection = new HubConnection(DEFAULT_SERVER_URL);
HubProxy hub = connection.createHubProxy("ChatHub");
connection.error(new ErrorCallback() {
@Override
public void onError(final Throwable error) {
runOnUiThread(new Runnable() {
public void run() {
Toast.makeText(getApplicationContext(), error.getMessage(), Toast.LENGTH_LONG).show();
}
});
}
});
hub.subscribe(new Object() {
@SuppressWarnings("unused")
public void messageReceived(final String name, final String message) {
runOnUiThread(new Runnable() {
public void run() {
Toast.makeText(getApplicationContext(), name + ": " + message, Toast.LENGTH_LONG).show();
}
});
}
});
connection.start()
.done(new Action<Void>() {
@Override
public void run(Void obj) throws Exception {
runOnUiThread(new Runnable() {
public void run() {
Toast.makeText(getApplicationContext(), "Done Connecting!", Toast.LENGTH_LONG).show();
}
});
}
});
connection.received(new MessageReceivedHandler() {
@Override
public void onMessageReceived(final JsonElement json) {
runOnUiThread(new Runnable() {
public void run() {
JsonObject jsonObject = json.getAsJsonObject();
JsonArray jsonArray =jsonObject.getAsJsonArray("A");
Toast.makeText(getApplicationContext(), jsonArray.get(0).getAsString() + ": " + jsonArray.get(1).getAsString(), Toast.LENGTH_LONG).show();
}
});
}
}); همانطور که مشاهده میکنید توسط قطعه کد زیر SKD مربوطه در نسخههای قدیمی اندروید نیز بدون مشکل کار خواهد کرد:
Platform.loadPlatformComponent( new AndroidPlatformComponent() );
در ادامه توسط متد createHubProxy ارجاعی به هابی که در سمت سرور ایجاد کردیم، دادهایم:
HubProxy hub = connection.createHubProxy("ChatHub"); در ادامه نیز توسط یک روال رویدادگردان وضعیت اتصال را چک کردهایم. یعنی در زمان بروز خطا در نحوه ارتباط یک پیام بر روی صفحه نمایش داده میشود:
connection.error(new ErrorCallback() {
@Override
public void onError(final Throwable error) {
runOnUiThread(new Runnable() {
public void run() {
Toast.makeText(getApplicationContext(), error.getMessage(), Toast.LENGTH_LONG).show();
}
});
}
}); hub.subscribe(new Object() {
@SuppressWarnings("unused")
public void messageReceived(final String name, final String message) {
runOnUiThread(new Runnable() {
public void run() {
Toast.makeText(getApplicationContext(), name + ": " + message, Toast.LENGTH_LONG).show();
}
});
}
}); connection.start()
.done(new Action<Void>() {
@Override
public void run(Void obj) throws Exception {
runOnUiThread(new Runnable() {
public void run() {
Toast.makeText(getApplicationContext(), "Done Connecting!", Toast.LENGTH_LONG).show();
}
});
}
}); connection.received(new MessageReceivedHandler() {
@Override
public void onMessageReceived(final JsonElement json) {
runOnUiThread(new Runnable() {
public void run() {
JsonObject jsonObject = json.getAsJsonObject();
JsonArray jsonArray =jsonObject.getAsJsonArray("A");
Toast.makeText(getApplicationContext(), jsonArray.get(0).getAsString() + ": " + jsonArray.get(1).getAsString(), Toast.LENGTH_LONG).show();
}
});
}
});
public enum TransportType {
ServerSentEvents,
LongPolling,
Auto
} نمیدونم بر چه اساسی چنین اشتباهاتی رو در کدنویسی رها کردند.
headers: { 'Authorization': 'Bearer ' + Token } https://api.instagram.com/v1/users/{user-id}/?access_token=ACCESS-TOKEN