protected override void AttachDefinedAttribute()
 {
     HullId     = AttachOneAttribute <MonitoredValue>(".hullId", JsonToken.TokenType.String);
     HullName   = AttachOneAttribute <MonitoredValue>(".hullName", JsonToken.TokenType.String);
     SpriteName = AttachOneAttribute <MonitoredValue>(".spriteName", JsonToken.TokenType.String);
     HullSize   = AttachOneAttribute <MonitoredValue>(".hullSize", JsonToken.TokenType.String);
 }
 protected override void AttachDefinedAttribute()
 {
     BaseHullId = AttachOneAttribute<MonitoredValue>(".baseHullId", JsonToken.TokenType.String);
     SkinHullId = AttachOneAttribute<MonitoredValue>(".skinHullId", JsonToken.TokenType.String);
     Tags =       AttachOneAttribute<MonitoredArray>(".tags");
     HullName = AttachOneAttribute<MonitoredValue>(".hullName", JsonToken.TokenType.String);
     SpriteName = AttachOneAttribute<MonitoredValue>(".spriteName", JsonToken.TokenType.String);
     HullSize = AttachOneAttribute<MonitoredValue>(".hullSize", JsonToken.TokenType.String);
     Tech = AttachOneAttribute<MonitoredValue>(".tech", JsonToken.TokenType.String);
 }
Beispiel #3
0
 public MonitoredValueViewModel(MonitoredValue monitoredValue)
 {
     MonitoredValue = monitoredValue;
     if (MonitoredValue != null)
     {
         binding.Add(MonitoredValue.Bind(x => x.Content, (sender, arg) =>
         {
             NotifyOfPropertyChange(nameof(Value));
             NotifyOfPropertyChange(nameof(ValueWarning));
         }));
     }
 }
Beispiel #4
0
        private IDisposable m_ServerMessageSubscriber; // subscribes to messages that are only bound for the server

        #endregion Fields

        #region Constructors

        public BesiegedServer()
        {
            m_IsServerInitialized = new MonitoredValue<bool>(false);

            MessageSubject = new Subject<BesiegedMessage>();

            var subjectSource = m_MessageQueue
                .GetConsumingEnumerable()
                .ToObservable(TaskPoolScheduler.Default)
                .Subscribe(MessageSubject);

            //MessagePublisher = observableMessages.Publish();
        }
Beispiel #5
0
    public void Register(MonitoredValue <int> hitpoint, int maxHitpoint, MonitoredValue <int> shield)
    {
        this.hitpointBar.maxValue = maxHitpoint;
        this.hitpointText.text    = hitpoint.Val.ToString() + "/" + this.hitpointBar.maxValue.ToString();
        this.hitpointBar.value    = hitpoint.Val;
        this.shieldText.text      = shield.Val.ToString();

        hitpoint.OnChange += (oldVal, newVal) => {
            if (newVal < oldVal)
            {
                new PopDropText(this.gameObject, (oldVal - newVal).ToString(), Color.red);
            }
            if (newVal < 0)
            {
                newVal = 0;
            }
            this.hitpointText.text = newVal.ToString() + "/" + this.hitpointBar.maxValue.ToString();
            this.hitpointBar.value = newVal;
        };

        shield.OnChange += (oldVal, newVal) => {
            this.shieldText.text = newVal.ToString();
        };
    }
        private ClientGameEngine()
        {
            MediaPlayer = new System.Media.SoundPlayer(@"resources/Audio/BesiegedIntro.wav");
            m_TcpBinding = new NetTcpBinding(SecurityMode.None, true)
                {
                    ReliableSession = { InactivityTimeout = new TimeSpan(0, 2, 0) },
                    SendTimeout = new TimeSpan(0, 2, 0),
                    ReceiveTimeout = new TimeSpan(0, 2, 0),
                    OpenTimeout = new TimeSpan(0, 1, 0),
                    CloseTimeout = new TimeSpan(0, 1, 0),
                    MaxReceivedMessageSize = 2147483647,
                    ReaderQuotas =
                    {
                        MaxArrayLength = 2147483647,
                        MaxBytesPerRead = 2147483647,
                        MaxStringContentLength = 2147483647,
                        MaxDepth = 2147483647,
                    },
                };

            GamesCollection = new ObservableCollection<GameInfoMessage>();
            PlayerCollection = new ObservableCollection<PlayerInfoMessage>();
            ChatMessageCollection = new ObservableCollection<string>();

            AllPlayersReady = new MonitoredValue<bool>(false);
            IsServerConnected = new MonitoredValue<bool>(false);
            IsServerConnected.ValueChanged += (from, to) =>
            {
                if (!to)
                {
                    Action postRender = () => RenderMessageDialog.RenderMessage("Unable to establish connection to server");
                    ChangeState(m_PreviousGameState, postRender);
                }
                else
                {
                    Task.Factory.StartNew(() => ChangeState(MultiplayerMenuState.Get()), CancellationToken.None, TaskCreationOptions.None, GlobalResources.m_TaskScheduler);
                }
            };

            EndpointAddress endpointAddress = new EndpointAddress(String.Format("net.tcp://{0}:{1}/BesiegedServer/BesiegedMessage", ClientSettings.Default.ServerIP, ClientSettings.Default.ServerPort));
            m_DuplexChannelFactory = new DuplexChannelFactory<IBesiegedServer>(m_ClientCallback, m_TcpBinding, endpointAddress);
            m_BesiegedServer = m_DuplexChannelFactory.CreateChannel();

            m_DuplexChannelFactory.Faulted += (s, ev) => MessageBox.Show("Its faulted");

            var MessageSubject = new Subject<BesiegedMessage>();

            var messagePublisher = m_ClientCallback.MessageQueue
                     .GetConsumingEnumerable()
                     .ToObservable(TaskPoolScheduler.Default)
                     .Subscribe(MessageSubject);

            //var messagePublisher = observableMessages.Publish();

            // All generic client messages are handled here
            var genericServerMessageSubscriber = MessageSubject
                .Where(message => message is GenericClientMessage)
                .Subscribe(message =>
                {
                    var genericMessage = message as GenericClientMessage;
                    switch (genericMessage.MessageEnum)
                    {
                        case ClientMessage.ClientMessageEnum.ConnectSuccessful:
                            m_ClientId = genericMessage.ClientId;
                            IsServerConnected.Value = true;
                            break;

                        case ClientMessage.ClientMessageEnum.AllPlayersReady:
                            AllPlayersReady.Value = true;
                            break;

                        case ClientMessage.ClientMessageEnum.PlayerNotReady:
                            AllPlayersReady.Value = false;
                            break;

                        case ClientMessage.ClientMessageEnum.StartGame:
                            ChangeState(PlayingGameState.Get());
                            break;

                        case ClientMessage.ClientMessageEnum.GameDisbanded:
                            if (IsGameCreator)
                            {
                                ChangeState(MultiplayerMenuState.Get());
                            }
                            else
                            {
                                Action disbandedAction = () => RenderMessageDialog.RenderMessage("The game creator has disbanded the game");
                                ChangeState(MultiplayerMenuState.Get(), disbandedAction);
                            }
                            IsGameCreator = false;
                            ResetLobby();
                            break;

                        case ClientMessage.ClientMessageEnum.GameNotFound:
                            Action notFoundAction = () => RenderMessageDialog.RenderMessage("The game you are trying to reach was not found");
                            ChangeState(MultiplayerMenuState.Get(), notFoundAction);
                            break;

                        case ClientMessage.ClientMessageEnum.RemoveGame:
                            Action removeGameAction = () =>
                            {
                                var game = GamesCollection.FirstOrDefault(x => x.GameId == message.GameId);
                                if (game != null)
                                {
                                    GamesCollection.Remove(game);
                                }
                            };
                            ExecuteOnUIThread(removeGameAction);
                            break;

                        case ClientMessage.ClientMessageEnum.RemovePlayer:
                            Action removePlayerAction = () =>
                            {
                                var player = PlayerCollection.FirstOrDefault(x => x.ClientId == message.ClientId);
                                if (player != null)
                                {
                                    PlayerCollection.Remove(player);
                                }
                            };
                            ExecuteOnUIThread(removePlayerAction);
                            break;

                        case ClientMessage.ClientMessageEnum.TransitionToLoadingState:
                            Action loadingAction = () => ClientGameEngine.Get().ChangeState(LoadingState.Get());
                            ExecuteOnUIThread(loadingAction);
                            break;

                        case ClientMessage.ClientMessageEnum.TransitionToMultiplayerMenuState:
                            IsGameCreator = false;
                            ResetLobby();
                            Action multiplayerAction = () => ClientGameEngine.Get().ChangeState(MultiplayerMenuState.Get());
                            ExecuteOnUIThread(multiplayerAction);
                            break;

                        case ClientMessage.ClientMessageEnum.ActiveTurn:
                            InGameEngine.Get().ActivateTurn();
                            Action action = () => RenderMessageDialog.RenderMessage("It is now your turn!");
                            ExecuteOnUIThread(action);
                            break;

                        case ClientMessage.ClientMessageEnum.StartBattlePhase:
                            Action startBattleAction =
                                () => RenderMessageDialog.RenderButtons("Start a fight?", new[] { "Yes", "No" },
                                    (s, e) => ClientGameEngine.Get().SendMessageToServer(
                                        s.ToString() == "Yes" ? new GenericGameMessage() { MessageEnum = GameMessage.GameMessageEnum.StartBattlePhase }
                                                              : new GenericGameMessage() { MessageEnum = GameMessage.GameMessageEnum.SkipBattlePhase }));

                            ClientGameEngine.Get().ExecuteOnUIThread(startBattleAction);
                            break;

                        default:
                            throw new Exception("Unhandled GenericClientMessage was received: " + genericMessage.MessageEnum.ToString());
                    }
                });

            // All other server messages are handled here
            var m_ServerMessageSubscriber = MessageSubject
                .Where(message => message is ClientMessage && !(message is GenericClientMessage))
                .Subscribe(message =>
                {
                    if (message is ClientChatMessage)
                    {
                        Action action = () => ChatMessageCollection.Add((message as ClientChatMessage).Contents);
                        ExecuteOnUIThread(action);
                    }

                    else if (message is PlayerInfoMessage)
                    {
                        PlayerInfoMessage player = PlayerCollection.Where(x => x.ClientId == (message as PlayerInfoMessage).ClientId).FirstOrDefault();
                        Action action = () =>
                        {
                            if (player != null)
                            {
                                PlayerCollection.Remove(player);
                            }
                            PlayerCollection.Add(message as PlayerInfoMessage);
                        };
                        ExecuteOnUIThread(action);
                    }

                    else if (message is PlayerGameInfoMessage)
                    {
                        m_GameId = (message as PlayerGameInfoMessage).GameId;
                        if ((message as PlayerGameInfoMessage).IsCreator)
                        {
                            IsGameCreator = true;
                        }
                        ChangeState(PregameLobbyState.Get());
                    }

                    else if (message is GameInfoMessage)
                    {
                        GameInfoMessage game = GamesCollection.Where(x => x.GameId == (message as GameInfoMessage).GameId).FirstOrDefault();
                        Action action = () =>
                        {
                            if (game != null)
                            {
                                GamesCollection.Remove(game);
                            }
                            GamesCollection.Add(message as GameInfoMessage);
                        };
                        ExecuteOnUIThread(action);
                    }

                    else if (message is ErrorDialogMessage)
                    {
                        Action action = () =>
                        {
                            RenderMessageDialog.RenderMessage((message as ErrorDialogMessage).Contents);
                        };
                        ChangeState(m_PreviousGameState, action);
                        ResetLobby();
                    }
                    else if (message is ClientGameStateMessage)
                    {
                        ClientGameStateMessage mem = message as ClientGameStateMessage;
                        Action action = () =>
                        {
                            if (mem.State != null)
                            {
                                InGameEngine.Get().Board = mem.State;
                            }
                        };
                        ExecuteOnUIThread(action);
                    }

                    else if (message is WaitingForTurnMessage)
                    {
                        InGameEngine.Get().DeActivateTurn();
                        Action action = () => RenderMessageDialog.RenderMessage(string.Format("It is now {0}'s turn", (message as WaitingForTurnMessage).ActivePlayerName));
                        ExecuteOnUIThread(action);
                    }
                    else if (message is UpdatedUnitPositionMessage)
                    {
                        Action action = () =>
                        {
                            UpdatedUnitPositionMessage m = message as UpdatedUnitPositionMessage;
                            foreach (UnitMove move in m.Moves)
                            {
                                BaseUnit unit = InGameEngine.Get()
                                                            .Board.Units.FirstOrDefault(
                                                                x =>
                                                                x.X_Position == move.StartCoordinate.XCoordinate &&
                                                                x.Y_Position == move.StartCoordinate.YCoordinate);
                                if (unit == null) continue;
                                InGameEngine.Get().Board.Units.Remove(unit);
                                unit.X_Position = move.EndCoordinate.XCoordinate;
                                unit.Y_Position = move.EndCoordinate.YCoordinate;
                                InGameEngine.Get().Board.Units.Add(unit);
                            }
                            DrawUnitState.Get().Cleanup(); //cleanup old
                            InGameEngine.Get().ChangeState(DrawUnitState.Get()); //render new
                        };
                        ExecuteOnUIThread(action);
                    }
                    else if (message is GameOverMessage)
                    {
                        GameOverMessage m = message as GameOverMessage;

                        Action a = () =>
                        {
                            string msg = m.WinnerId == ClientGameEngine.Get().ClientID ? "You Won!" : "You Lost...\n" + m.WinnerName + " is the winner.";
                            RenderMessageDialog.RenderMessage(msg, (s, e) =>
                            {
                                Action b = () =>
                                {
                                    ClientGameEngine.Get().MediaPlayer.PlayLooping();
                                    ClientGameEngine.Get().m_CurrentWindow.WindowState = WindowState.Normal;

                                    ClientGameEngine.Get().Canvas.Width = ClientSettings.Default.Width;
                                    ClientGameEngine.Get().Canvas.Height = ClientSettings.Default.Height;
                                    ClientGameEngine.Get().ClientDimensions.Width = ClientSettings.Default.Width;
                                    ClientGameEngine.Get().ClientDimensions.Width = ClientSettings.Default.Height;

                                    if (!ClientSettings.Default.Fullscreen)
                                    {
                                        Application.Current.MainWindow.Width = ClientSettings.Default.Width + 15;
                                        Application.Current.MainWindow.Height = ClientSettings.Default.Height + 38;
                                    }

                                    ClientGameEngine.Get().ChangeState(MainMenuState.Get());
                                };

                                ExecuteOnUIThread(b);
                            });
                        };

                        ExecuteOnUIThread(a);
                    }
                });
        }
 void IGXDLMSBase.SetValue(GXDLMSSettings settings, ValueEventArgs e)
 {
     if (e.Index == 1)
     {
         LogicalName = GXCommon.ToLogicalName(e.Value);
     }
     else if (e.Index == 2)
     {
         List <object> tmp      = (List <object>)e.Value;
         ObjectType    ot       = (ObjectType)Convert.ToInt16(tmp[0]);
         string        ln       = GXCommon.ToLogicalName(tmp[1]);
         int           attIndex = Convert.ToInt32(tmp[2]);
         MonitoredValue          = settings.Objects.FindByLN(ot, ln);
         MonitoredAttributeIndex = attIndex;
         if (MonitoredValue != null && attIndex != 0)
         {
             try
             {
                 DataType dt = MonitoredValue.GetDataType(attIndex);
                 SetDataType(3, dt);
                 SetDataType(4, dt);
                 SetDataType(5, dt);
                 SetDataType(6, dt);
                 SetDataType(7, dt);
             }
             catch (Exception)
             {
                 //It's OK if this fails.
             }
         }
     }
     else if (e.Index == 3)
     {
         ThresholdActive = e.Value;
     }
     else if (e.Index == 4)
     {
         ThresholdNormal = e.Value;
     }
     else if (e.Index == 5)
     {
         ThresholdEmergency = e.Value;
     }
     else if (e.Index == 6)
     {
         MinOverThresholdDuration = Convert.ToUInt32(e.Value);
     }
     else if (e.Index == 7)
     {
         MinUnderThresholdDuration = Convert.ToUInt32(e.Value);
     }
     else if (e.Index == 8)
     {
         List <object> tmp = (List <object>)e.Value;
         EmergencyProfile.ID             = (UInt16)tmp[0];
         EmergencyProfile.ActivationTime = (GXDateTime)GXDLMSClient.ChangeType((byte[])tmp[1], DataType.DateTime, settings.UseUtc2NormalTime);
         EmergencyProfile.Duration       = (UInt32)tmp[2];
     }
     else if (e.Index == 9)
     {
         List <UInt16> list = new List <UInt16>();
         if (e.Value != null)
         {
             foreach (object it in (List <object>)e.Value)
             {
                 list.Add(Convert.ToUInt16(it));
             }
         }
         EmergencyProfileGroupIDs = list.ToArray();
     }
     else if (e.Index == 10)
     {
         EmergencyProfileActive = Convert.ToBoolean(e.Value);
     }
     else if (e.Index == 11)
     {
         List <object> tmp  = (List <object>)e.Value;
         List <object> tmp1 = (List <object>)tmp[0];
         List <object> tmp2 = (List <object>)tmp[1];
         ActionOverThreshold.LogicalName     = GXCommon.ToLogicalName(tmp1[0]);
         ActionOverThreshold.ScriptSelector  = Convert.ToUInt16(tmp1[1]);
         ActionUnderThreshold.LogicalName    = GXCommon.ToLogicalName((byte[])tmp2[0]);
         ActionUnderThreshold.ScriptSelector = Convert.ToUInt16(tmp2[1]);
     }
     else
     {
         e.Error = ErrorCode.ReadWriteDenied;
     }
 }
Beispiel #8
0
 public Player(string name, string clientId, IClient callback, PlayerColor.PlayerColorEnum color)
     : base(name, clientId, callback)
 {
     PlayerColor = color;
     IsReady = new MonitoredValue<bool>(false);
 }
Beispiel #9
0
 public void Reset()
 {
     MonitoredValue?.Reset();
 }
Beispiel #10
0
 protected override void AttachDefinedAttribute()
 {
     HullId    = AttachOneAttribute <MonitoredValue>(".hullId", JsonToken.TokenType.String);
     VariantId = AttachOneAttribute <MonitoredValue>(".variantId", JsonToken.TokenType.String);
 }