Tôi đang viết một trò chơi trong SignalR. Ý tưởng là bạn kết nối với máy tính xách tay của bạn, mà sẽ được sử dụng như là "hiển thị" và sau đó bạn kết nối với điện thoại thông minh của bạn và đó sẽ được sử dụng như "phím điều khiển". Toàn bộ thiết lập hoạt động rất tốt.SignalR: Hub OnConnected không được gọi nếu không có phương thức máy khách
Bây giờ tất cả đều hoạt động, tôi đã quyết định tái cấu trúc mã. Tôi nhận ra rằng mối quan hệ giữa cần điều khiển và màn hình hiển thị là một cách (màn hình không bao giờ cần gửi thông tin trở lại cần điều khiển). Vì vậy, tôi quyết định rằng tôi không cần bất kỳ chức năng client invokable signalR trên phím điều khiển (ví dụ như không có sử dụng cho gameHub.client.joyStickMethod()
trong js phím điều khiển.
Nó được sau đó tôi phát hiện ra một cái gì đó kỳ lạ
Nó chỉ ra rằng trung tâm phương pháp public override Task OnConnected()
mà tôi ghi đè lên để đối phó với các loại khác nhau của khách hàng (hiển thị và cần điều khiển) không được gọi trừ khi tôi định nghĩa một myHub.client.clientSideMethod()
Dưới đây là ví dụ tôi đang đối phó với:.
var gameHub = $.connection.gameHub;
gameHub.client.connection();
$("#joystick").joystick({
hub: gameHub
});
gameHub.client.activateJoystick = function() { };
$.connection.hub.qs = "type=joystick&gameId=" + "@Model.Id";
$.connection.hub.start(); //this will invoke on connected
Bạn thấy rằng khách hàng có sản phẩm nào phương pháp phụ? Đó là lý do tại sao OnConnected
được gọi ở phía máy chủ. Nếu tôi loại bỏ dòng mã đó, nó sẽ không được gọi.
var gameHub = $.connection.gameHub;
gameHub.client.connection();
$("#joystick").joystick({
hub: gameHub
});
//gameHub.client.activateJoystick = function() { };
$.connection.hub.qs = "type=joystick&gameId=" + "@Model.Id";
$.connection.hub.start(); //this will invoke on connected
Điều này sẽ không hoạt động do không có phương thức phía máy khách trên Hub. Tôi có lẽ có thể thêm một phương pháp RegistrateJoystick
trên Hub và gọi đó, nhưng tôi nghĩ rằng hành vi này là bất ngờ. Do đó, câu hỏi của tôi là:
Có cách nào để "kết nối" thủ công với trung tâm, để phương thức OnConnect
sẽ được gọi?
Cảm ơn bạn đã trả lời.Tôi hiểu logic trong những gì bạn đang nói, nhưng đồng thời, tên của phương thức phía máy chủ "OnConnect" âm thanh với tôi rằng nó sẽ được gọi là không có vấn đề nếu khách hàng của bạn có phương pháp invokable hay không. – pardahlman
Chắc chắn, nhưng đó không phải là cách nó hoạt động. Và phương pháp này là OnConnected. – davidfowl
Chỉ cần lặp lại những gì pardahlman nói một chút không trực quan của nó cho việc đặt tên, có thể là giá trị gọi nó ra khá rõ ràng trong tài liệu để tránh nhầm lẫn. –