Wpis z mikrobloga

Jest tu jakiś szpec od #signalr? Robię sobie grę przeglądarkową, na backendzie mam Hub, który obsługuje mi poczekalnię. Nie jestem pewien jak zaimplementować dołączanie do konkretnego pokoju, a potem wykonywanie ruchów w grze. Na logikę chciałbym mieć osobny Hub do obsługi logiki gry, ale nie mam pojęcia jak powinno się to robić - rozłączyć się z huba poczekalni, dodać gracza do grupy 'InGame'? Jak później powinienem się połączyć z następnym hubem i przekazać informacje, żeby dodał do konkretnego otwartego pokoju? Może powinno się to robić całkiem inaczej? Niestety na necie informacji jak na lekarstwo. :( #csharp #dotnet #programowanie
  • 12
@PotatoZiemniak: Zdecydowanie nie jestem specem od SignalR. Głośno się zastanawiam, bo moja wiedza o SignalR jest pewnie podobna.

Ale czy nie wystarczą 2 Huby (Poczekalnia i InGame)?
A już konkretny otwarty pokój mógłby być grupą?
I nigdy nie wysyłasz informacji do wszystkich klientów, ale tylko do grupy.
I klient jak dostaje akcje z huba InGame, to już wie, że dostał wiadomość przeznaczoną tylko dla jego pokoju.
Problem jest taki: jeśli gracz dołącza do pokoju to informuję wszystkich w poczekali, że ktoś dołączył do pokoju (przykładowo zwiększa się liczba graczy w danym pokoju, zmniejsza się licznik graczy w poczekalni itp.). Jak już osoba w nim jest, to chciałbym samą logikę gry obsłużyć innym Hubem. I tu się pojawiają schody, bo grupy tworzy się w obrębie Huba, więc musiałbym jakoś przekazać informację do drugiego, że ktoś utworzył/wszedł/zrobił cokolwiek w danym
via Wykop Mobilny (Android)
  • 0
@MroczekBall3D: a co z logiką gry? Zakładając, że będzie kilkanaście metod to zrobi się syf w hubie i nie będzie zachowanej zasady single resposibility. Podobnie będzie w sytuacji, gdybym chciał dodać więcej niż jedną grę.
via Wykop Mobilny (Android)
  • 1
@PotatoZiemniak: logika nie powinna mieć związanego nic z hubami praktycznie. Hub6ly tylko do kuminikacji.

Wstrzykuj sobie IHubContext jak chcesz użyć huba na zewnątrz (np w businessie)

Jak chcesz mieć clean aechitecture to użyj jeszcze rabbit mq jako brokera

Pisze na telefonie, sorki za literówki
@MroczekBall3D: dzięki za odpowiedź, jeśli mogę to jeszcze chwilę bym Cię pomęczył pytaniami, żeby dobrze to zrobić:
1. Ok załóżmy, że mam jeden hub - obsługuje on poczekalnie - wszystkie akcje związane z aktualizacją listy pokojów, oczywiście sama logika biznesowa jest w jakimś serwisie, który jest wstrzyknięty, z huba idą tylko wywołania metod. Następnie dodaję metody do obsługi gry a co za tym idzie kilkanaście/kilkadziesiąt kolejnych akcji - czy to na
via Wykop Mobilny (Android)
  • 0
@PotatoZiemniak: zacznę od końca
2. Tak, ja bym to tak widział. Hub otrzymuje informacje z kolejek i wysyła je w świat. Masz za pomocą rabbit obsługę zapytań, podgląd ile wiadomości (jakie obciążenie) ma wykonać hub itd

1. Ale nowa gra to nowa logika, inne endpoiny itd. Nie wiem co przez to rozumiesz :D

Kolejna sprawa, wstrzyknąć to masz huba, a nie logikę. W logice wysyłasz info do rabbit. Np używasz command
via Wykop Mobilny (Android)
  • 0
@PotatoZiemniak: rabbit mq jest przykładem. Nie musisz go stosować. Osobiście bym użył jakbym chciał bardziej rozproszona architekturę zrobić i mieć więcej informacji o przepływie danych.

Albo jakbym chciał mieć pewność, że wiadomość dotrze do klienta i wiedzieć która wiadomość nie dotarła (ack message)
@MroczekBall3D: Jeśli mogę Cię jeszcze trochę pomęczyć, bo naprawdę nie daje mi to spokoju i czuję się trochę zagubiony: Tutaj jest mój hub obsługujący poczekalnię (zignoruj np. brak obsługi błędów, to test na razie ;) https://github.com/Makulak/PotatoServer/blob/master/Hubs/WaitingRoomHub.cs
Załóżmy, że chcę dodać metody StartGame(...) oraz MakeMove(...) i aby uprościć zrezygnujmy z brokera. Jak to w miarę ładnie zrobić? Na logikę utworzył bym GameHub i wstrzyknął IHubContext, żeby mieć dostęp do utworzonych grup (czyli