/// <summary> /// Obsługa normalnego działania. /// </summary> /// <param name="client"></param> private void HandleClient(Internals.ServerClient client) { if (DateTime.Now - client.LastAction > this.MaxClientIdleTime) { client.Send(new Message(MessageType.TimeOut, null)); client.CloseSocket(); client.Status = ClientStatus.NotResponding; Logger.Info("Client {0}:{1} - connection closed, client is not responding", client.RemoteEndpoint.Address, client.RemoteEndpoint.Port); } else { client.Receive(); } }
/// <summary> /// Obsługa sekwencji powitalnej. /// </summary> /// <param name="client"></param> /// <param name="i"></param> private void HandleWelcomeSequence(Internals.ServerClient client, ref int i) { client.Receive(); if (client.Messages.Count > 0) { if (client.Messages[0].Type == MessageType.Welcome) //Odebraliśmy wiadomość powitalną { Messages.ClientWelcome msg; try { msg = new Messages.ClientWelcome(client.Messages[0]); } catch //Błędna { client.Send(new Message(MessageType.InvalidSequence, null)); client.CloseSocket(); Logger.Info("Client {0}:{1} rejected, reason: invalid welcome sequence", client.RemoteEndpoint.Address, client.RemoteEndpoint.Port); this._ClientsCollection.RemoveAt(i--); return; } client.Messages.RemoveAt(0); if (msg.Version == this.Version) //Wszystko ok { client.Send(new Message(MessageType.AllOk, null)); client.Status = ClientStatus.Ok; Logger.Info("Client {0}:{1} - welcome sequence went well", client.RemoteEndpoint.Address, client.RemoteEndpoint.Port); } else //Niepoprawna wersja { client.Send(new Message(MessageType.IncompatibleVersion, null)); client.CloseSocket(); Logger.Info("Client {0}:{1} rejected, reason: incompatible version", client.RemoteEndpoint.Address, client.RemoteEndpoint.Port); this._ClientsCollection.RemoveAt(i--); } } else if (client.Messages[0].Type == MessageType.IncompatibleVersion || client.Messages[0].Type == MessageType.InvalidSequence) //Klient ma inną wersję niż my { client.CloseSocket(); Logger.Info("Client {0}:{1} closed the connection, reason: incompatible version", client.RemoteEndpoint.Address, client.RemoteEndpoint.Port); this._ClientsCollection.RemoveAt(i--); } else //Błędna sekwencja ze strony klienta { client.Send(new Message(MessageType.InvalidSequence, null)); client.CloseSocket(); Logger.Info("Client {0}:{1} rejected, reason: invalid welcome sequence", client.RemoteEndpoint.Address, client.RemoteEndpoint.Port); this._ClientsCollection.RemoveAt(i--); } } }