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); }
public MonitoredValueViewModel(MonitoredValue monitoredValue) { MonitoredValue = monitoredValue; if (MonitoredValue != null) { binding.Add(MonitoredValue.Bind(x => x.Content, (sender, arg) => { NotifyOfPropertyChange(nameof(Value)); NotifyOfPropertyChange(nameof(ValueWarning)); })); } }
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(); }
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; } }
public Player(string name, string clientId, IClient callback, PlayerColor.PlayerColorEnum color) : base(name, clientId, callback) { PlayerColor = color; IsReady = new MonitoredValue<bool>(false); }
public void Reset() { MonitoredValue?.Reset(); }
protected override void AttachDefinedAttribute() { HullId = AttachOneAttribute <MonitoredValue>(".hullId", JsonToken.TokenType.String); VariantId = AttachOneAttribute <MonitoredValue>(".variantId", JsonToken.TokenType.String); }