示例#1
0
        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);
                }
            }
        }
示例#2
0
        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);
                }
            }
        }
示例#3
0
        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);
                }
            }
        }
示例#4
0
        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);
            }
        }
示例#5
0
        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);
                }
            }
        }