У меня есть один поток прослушивания, который прослушивает входящие сообщения с сервера. Когда сеанс запущен, сообщение принимается. StartSessionMessage (полученный из RequestMessage) отправляется WeakReferenceMessenger.Default.Send(new StartSessionMessage(MapSession(sessionData))).
В настоящее время есть 4 получающих модели представления, которые подписались на это сообщение одинаковым образом
Код: Выделить всё
WeakReferenceMessenger.Default.Register(this, (r, m) => { InitSession(m.Session); });
Код: Выделить всё
public class StartSessionMessage : RequestMessage
{
public Session Session { get; set; }
public StartSessionMessage(Session session)
{
Session = session;
}
}
Код: Выделить всё
public async Task StartServerAsync()
{
string clientIP = NetworkManager.GetLocalIpv4();
int clientPort = Int32.Parse(ConfigurationManager.AppSettings.Get("LocalPort"));
IPAddress ipAddress = IPAddress.Parse(clientIP);
IPEndPoint localEndPoint = new IPEndPoint(ipAddress, clientPort);
using Socket listener = new Socket(ipAddress.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
listener.Bind(localEndPoint);
listener.Listen(100);
var buffer = new byte[128_000_000];
try
{
while (true)
{
// Receive message
var handler = listener.Accept();
int received = handler.Receive(buffer, SocketFlags.None);
var receivedMessage = Encoding.UTF8.GetString(buffer, 0, received);
if (receivedMessage.Contains(MessageTags.SESSION))
{
receivedMessage = receivedMessage.Replace(MessageTags.SESSION, "");
var sessionData = JsonConvert.DeserializeObject(receivedMessage);
WeakReferenceMessenger.Default.Send(new StartSessionMessage(MapSession(sessionData)));
}
}
}
catch (Exception ex)
{
listener.Close();
Task.Run(() => { _ = StartServerAsync(); });
}
}
Код: Выделить всё
public MainWindowViewModel(Window window)
{
_window = window;
WeakReferenceMessenger.Default.Register(this, (r, m) => { InitSession(m.Session); });
var baseGameView = new BaseGameView();
baseGameView.Show();
var gameScoreView = new GameScoresView();
gameScoreView.Show();
WindowManipulator.SetWindowToBigScreen(gameScoreView, false, WindowState.Minimized, WindowStyle.None);
var editPlayersView = new EditPlayersView();
editPlayersView.Show();
var ImageScreenView = new ImageScreenView();
ImageScreenView.Show();
WindowManipulator.SetWindowToBigScreen(ImageScreenView, false, WindowState.Maximized, WindowStyle.None);
}
private void InitSession(Session messageValue)
{
WindowManipulator.SetWindowToSmallScreen(_window, false, WindowState.Minimized, WindowStyle.None);
}
Код: Выделить всё
public BaseGameViewModel(Window window)
{
_window = window;
Session = new Session();
WeakReferenceMessenger.Default.Register(this, (r, m) => { InitSession(m.Session); });
}
private void InitSession(Session session)
{
Session = session;
Session.WarmUpDoneEvent += ChangeTimeText;
Session.SessionDoneEvent += SessionDone;
Session.SessionStoppedEvent += StopSession;
WindowManipulator.SetWindowToSmallScreen(_window, false, WindowState.Minimized, WindowStyle.None);
}
Код: Выделить всё
public GameScoresViewModel(Window window)
{
_window = window;
WeakReferenceMessenger.Default.Register(this, (r, m) => { InitSession(m.Session); });
}
private void InitSession(Session session)
{
TeamName = session.TeamName;
WindowManipulator.SetWindowToBigScreen(_window, true, WindowState.Maximized, WindowStyle.None);
}
Код: Выделить всё
public EditPlayersViewModel(Window window)
{
_window = window;
_isListReset = true;
_resetSelectedIndex = false;
_firstTime = true;
_players = new ObservableCollection
();
WeakReferenceMessenger.Default.Register(this, (r, m) => { InitSession(m.Session); });
}
private void InitSession(Session session)
{
Players = new ObservableCollection(session.Players.Select(x => new Player(x)));
_isListReset = true;
_firstTime = true;
WindowManipulator.SetWindowToSmallScreen(_window, true, WindowState.Maximized, WindowStyle.None);
}
код > код. Представления всегда загружаются в одном и том же порядке, это полностью отдельные окна, все из которых начинаются с кода программной части MainWindow.
Поэтому мне интересно, что я делаю неправильно, есть ли максимальный размер количество регистров для 1 сообщения?
- Пытал искать в Интернете максимумы или другие случаи с той же проблемой, но ничего не нашел.
< li>Пытался изменить сообщение с RequestMessage на ValueChangedMessage, тоже ничего не изменилось. Подумал, что, возможно, тип сообщения имеет ограничение на количество получателей. - Дважды проверил код и правильное ли сообщение использовалось в регистрах.
Подробнее здесь: https://stackoverflow.com/questions/789 ... erencemess
Мобильная версия