/// <summary> /// Zet Turn om in een Message /// </summary> /// <returns>Message van messagetype Turn. Gevuld met de huidige turn.</returns> /// <seealso cref="Message"/> internal Message ToMessage() { Message m = new Message(); m.Type = MessageType.Turn; m.Turn = this; return m; }
public override void StartCommunicating() { _listener.Start(); _client = _listener.AcceptTcpClient(); if (_client.Connected) { OnConnected(); } if (_client.Connected) { Message connectedMessage = new Message(); connectedMessage.Type = MessageType.Connected; SendMessage(connectedMessage); Random r = new Random(); double x = r.NextDouble(); Console.Write("Diceroll: " + x); SendRequestFirstMove(); /* if (x >= 0.5) { Console.Write(" server starts\n"); OnRequestFirstMove(); } else { Console.Write(" client starts\n"); SendRequestFirstMove(); }*/ } DoCommunication(); if(_listener == null){ return; } _listener.Stop(); }
public abstract void SendMessage(Message m);
// /// <summary> /// Methode voor de afhandeling van een binnenkomend bericht, hierin wordt het bijbehorende event aangeroepen. /// </summary> /// <param name="m">Binnenkomend bericht</param> private void Proces_MessageReceived(Message m) { switch (m.Type) { case MessageType.Connected: OnConnected(); break; case MessageType.Turn: OnTurnReceived(m.Turn); break; case MessageType.Disconnect: DisconnectMessage dm = (DisconnectMessage)m; OnDisconnected(dm.Reason); break; case MessageType.SentMoveInvalid: OnSentMoveInvalid(m.Turn); break; case MessageType.WinRejected: OnWinRejected(); break; case MessageType.WinDetected: OnWinDetected(m.Turn, ((WinDetectedMessage)m).Winner); break; case MessageType.WinAccepted: OnWinAccepted(); break; case MessageType.RequestFirstMove: OnRequestFirstMove(); break; default: break; } }
/// <summary> /// Verstuur een aanvraag om de eerste move te doen. /// Voor intern gebruik na diceroll om startende speler aan te geven. /// </summary> /// <seealso cref="Message"/> /// <seealso cref="SendMessage"/> internal void SendRequestFirstMove() { Message m = new Message(); m.Type = MessageType.RequestFirstMove; SendMessage(m); }
/// <summary> /// Stuur een bericht naar de andere game instantie /// 'Voor intern gebruik' /// </summary> /// <param name="m">Bericht dat verzonden dient te worden</param> /// <seealso cref="OnDisconnected"/> internal void SendMessage(Message m) { try { BinaryFormatter bFormatter = new BinaryFormatter(); MemoryStream ms = new MemoryStream(); bFormatter.Serialize(ms, m); Byte[] data = ms.ToArray(); NetworkStream ns = _client.GetStream(); ns.Write(data, 0, data.Length); } catch (IOException) { OnDisconnected(DisconnectReason.ConnectionLost); } }
/// <summary> /// Methode om het binnenkomende bericht te verwerken en het bijbehorende event te triggeren. /// </summary> /// <param name="m">Ontvangen bericht</param> /// <seealso cref="Message"/> /// <seealso cref="Proces_MessageReceived"/> internal void OnMessageReceived(Message m) { new Thread(() => Proces_MessageReceived(m)).Start(); }
/// <summary> /// Verstuur een reactie op WinDetected dat er onenigheid is over de gedetecteerde winst /// </summary> /// <seealso cref="Message"/> /// <seealso cref="SendMessage"/> public void SendWinDisputed() { Message m = new Message(); m.Type = MessageType.WinRejected; SendMessage(m); }
/// <summary> /// Vertuur een reactie op WinDetected dat je het eens bent met de gedetecteerde winst. /// </summary> /// <seealso cref="Message"/> /// <seealso cref="SendMessage"/> /// <seealso cref="MessageType"/> public void SendWinAccepted() { Message m = new Message(); m.Type = MessageType.WinAccepted; SendMessage(m); }
/// <summary> /// Verstuurt naar de andere instantie dat de ontvangen zet ongeldig is. /// </summary> /// <param name="t">De turn die als ongeldig gezien wordt</param> /// <seealso cref="Message"/> /// <seealso cref="SendMessage"/> public void SendMoveInvalid(Turn t) { Message m = new Message(); m.Turn = t; m.Type = MessageType.SentMoveInvalid; SendMessage(m); }