private static void ParseIncomingDragMessage(DataRecievedEventArgs e) { using (var stream = new MemoryStream(Encoding.UTF8.GetBytes(e.Data))) { var message = Serializer.TryReadObject <DragMessage>(stream); bool success = false; if (message == null || message.Name == null) { Logs.Game.WriteWarning("Failed to read drag message sent by " + e.RemoteEndPoint); } else { var draggable = Scene.Current.FindGameObject(message.Name)?.GetComponent <Draggable>(); if (draggable == null) { Logs.Game.WriteWarning("Recieved dragmessage, but could not find a draggable for it."); } else { switch (message.Action) { case DragAction.Start: draggable.StartDrag(); Logs.Game.Write("Recieved drag message: Start"); break; case DragAction.Move: if (message.Pos.HasValue) { draggable.ContinueDrag(ConvertPosition(draggable, message.Pos.Value)); } Logs.Game.Write($"Recieved drag message: Continue [{message.Pos.Value}]"); break; case DragAction.End: if (message.Pos.HasValue) { draggable.ContinueDrag(ConvertPosition(draggable, message.Pos.Value)); } draggable.EndDrag(); Logs.Game.Write($"Recieved drag message: End [{message.Pos.Value}]"); break; } success = true; } } if (!success) { OldContext.ShowNotification("Error", "Failed to load incoming drag message", 3); } } }
private static void ParseIncomingDiceMessage(DataRecievedEventArgs e) { using (var stream = new MemoryStream(Encoding.UTF8.GetBytes(e.Data))) { var message = Serializer.TryReadObject <DiceMessage>(stream); bool success = false; if (message == null || message.DiceID == null) { Logs.Game.WriteWarning("Failed to read dice message sent by " + e.RemoteEndPoint); } else { var dice = Scene.Current .FindComponents <Dice>() .Where(x => x.DiceID == message.DiceID) .FirstOrDefault(); if (Warnings.NullOrDisposed(dice)) { Logs.Game.WriteWarning("Recieved dice message, but could not find a pawn for it."); } else { if (!dice.Rolling) { dice.Roll(message.Time, message.Side); } else { OldContext.ShowNotification("Error", "Simultaneous dice rolls.", 3); } success = true; } } if (!success) { OldContext.ShowNotification("Error", "Failed to load incoming dice message.", 3); } } }
private static void ParseIncomingSpinMessage(DataRecievedEventArgs e) { using (var stream = new MemoryStream(Encoding.UTF8.GetBytes(e.Data))) { var message = Serializer.TryReadObject <SpinMessage>(stream); bool success = false; if (message == null || message.Name == null) { Logs.Game.WriteWarning("Failed to read spin message sent by " + e.RemoteEndPoint); } else { var target = Scene.Current.FindGameObject(message.Name); var spinner = Scene.Current.FindComponent <Spinner>(); if (Warnings.NullOrDisposed(target)) { Logs.Game.WriteWarning("Recieved spin message, but could not find a target for it."); } else if (Warnings.NullOrDisposed(spinner)) { Logs.Game.WriteWarning("Recieved spin message, but could not find a spinner for it."); } else { spinner.Spin(target, message.Angle); success = true; } } if (!success) { OldContext.ShowNotification("Error", "Failed to load incoming spin message.", 3); } } }
public static void ParseIncomingData(INetworker networker, DataRecievedEventArgs e) { if (e.Channel == CommandChannel) { Logs.Game.Write("Command Recieved: " + e.Data); if (e.Data == "Sync") { if (!networker.Hosting) { Logs.Game.WriteWarning($"Recived a Sync command while {networker.Status.ToString().ToLower()}"); } else { Sync(networker); } } } else if (e.Channel == SaveChannel) { ParseIncomingSave(e); } else if (e.Channel == DragChannel) { ParseIncomingDragMessage(e); } else if (e.Channel == DiceChannel) { ParseIncomingDiceMessage(e); } else if (e.Channel == SpinChannel) { ParseIncomingSpinMessage(e); } }
private static void ParseIncomingSave(DataRecievedEventArgs e) { using (var stream = new MemoryStream(Encoding.UTF8.GetBytes(e.Data))) { var save = Serializer.TryReadObject <Save>(stream); bool success = false; if (save == null) { Logs.Game.WriteWarning("Failed to read save sent by " + e.RemoteEndPoint); } else { var game = Scene.Current.FindComponent <GamePieces>(); if (game == null) { Logs.Game.WriteWarning("Recieved save, but could not find a game for it."); } else { game.Load(save, instant: true); game.Save(); success = true; } } if (success) { OldContext.ShowNotification("Success", "Recieved save", 3); } else { OldContext.ShowNotification("Error", "Failed to load incoming save", 3); } } }