/// <summary> /// Process van de server. /// </summary> /// <param name="stream">Stream die uit de client komt.</param> /// <param name="client"> Client.</param> /// <returns>informatie.</returns> /// <exception cref="System.InvalidOperationException">Wordt gegooid wanneer een commando wordt aangeroepen op een ongeldig moment.</exception> protected override string ProcessStream(string stream, TcpClient client) { // bepaal de opdracht // de opdracht is het gedeelte in de msg voor de # // daarna komen de parameters. string commandParams = string.Empty; string returnMessage = null; GameOX game = null; Commandos commando = CommandoHelper.SplitCommandAndParamsFromMessage(stream, out commandParams); /*foreach (GameOX games in this.gameOXen) * { * foreach (TcpClient tcp in games.TcpClients) * { * if (tcp == client) * { * game = games; * } * } * }*/ // Add een client to clientLijst. try { switch (commando) { // Verdeel between de naam van de speler en de dimension van het bord // wanneer de commandos is equal VerzoekTotDeelnemenSpel case Commandos.VerzoekTotDeelnemenSpel: VerzoekTotDeelnemenSpelCommandHandler handler = new VerzoekTotDeelnemenSpelCommandHandler(this.spelHandler, client); returnMessage = handler.HandleFromMessage(commandParams, out game); if (game.Status == GameOXStatussen.Gestart) { this.ProcessReturnMessage(returnMessage, game.TcpClients); game.Start(client, game); } else { this.ProcessReturnMessage(returnMessage, client); } break; case Commandos.SpelTegenComputer: VerzoekTotDeelnemenSpelCommandHandler handlerTegenComputerSpelen = new VerzoekTotDeelnemenSpelCommandHandler(this.spelHandler, client); returnMessage = handlerTegenComputerSpelen.HandleFromMessage(commandParams, out game); this.ProcessReturnMessage(returnMessage, client); game = this.spelHandler.GetGameFromTcpClient(client); game.Start(client, game); break; case Commandos.SpelerGestart: game = this.spelHandler.GetGameFromTcpClient(client); Teken teken = TekenHelper.CreateTekenEnum(commandParams); TekenHelper.AddTekenToSpeler(teken, game, client); returnMessage = EventHelper.CreateEvents(Events.YourTurn); this.ProcessReturnMessage(returnMessage, client); // stuur een wacht bericht naar andere speler. returnMessage = this.spelHandler.TegeHuidigeClient(client, game.TcpClients, out this.tegenHuidigeClient); this.ProcessReturnMessage(returnMessage, this.tegenHuidigeClient); break; case Commandos.StartSpel: // returnMessage = EventHelper.CreateSpelerGestartEvent(); // ProcessReturnMessage(returnMessage, tcpClients); break; case Commandos.DoeZet: // stuur een wacht bericht naar andere speler. returnMessage = this.spelHandler.TegeHuidigeClient(client, game.TcpClients, out this.tegenHuidigeClient); this.ProcessReturnMessage(returnMessage, this.tegenHuidigeClient); short nummer = short.Parse(commandParams); // Handel de info van de speler this.spelHandler.GetGameFromTcpClient(client); game = this.spelHandler.GetGameFromTcpClient(client); game.ChekOfHetValidBeZitIs(client, nummer, game); break; case Commandos.WachtenOpAndereDeelnemer: if (game == null) { throw new InvalidOperationException($"Het commando {nameof(Commandos.WachtenOpAndereDeelnemer)} mag niet worden gebruikt wanneer er nog geen game is gestart."); } this.ProcessReturnMessage(returnMessage, game.TcpClients); break; case Commandos.NieuwRondje: if (game == null) { throw new InvalidOperationException($"Het commando {nameof(Commandos.WachtenOpAndereDeelnemer)} mag niet worden gebruikt wanneer er nog geen game is gestart."); } this.ProcessReturnMessage(returnMessage, game.TcpClients); break; case Commandos.BeeindigSpel: game = this.spelHandler.GetGameFromTcpClient(client); game.StartNieuwRondje(client, game); break; } } catch (Exception exp) { // ok dan krijg ik een foutmelding, stuur die dan terug returnMessage = EventHelper.CreateErrorEvent(exp); } return(returnMessage); }