Exemple #1
0
        // ------------------------------------------------------------------------------------------
        /// <summary> Funkcja wysyłająca wiadomość do określonego podłączonego. </summary>
        /// <param name="client"> Podłączony klient. </param>
        /// <param name="message"> Wiadomość wysyłana do klienta. </param>
        private void SendMessage(ClientData client, Message message)
        {
            Socket socket = client.Socket;

            //  Szyfrowanie wiadomości do wsyłania
            if (client.Encrypted)
            {
                ICrypt encryptionServices = null;
                switch (client.CryptType)
                {
                case CryptType.RSA:
                    encryptionServices = encryptionServicesRSA;
                    break;

                case CryptType.ElGamal:
                    encryptionServices = encryptionServicesElGamal;
                    break;
                }
                message.Encrypt(encryptionServices, client.Key);
            }

            byte[] buffer = Encoding.ASCII.GetBytes(message.ToString());
            Console.Write(message.ToString());
            AsyncCallback sender = new AsyncCallback(SendCallback);

            socket.BeginSend(buffer, 0, buffer.Length, SocketFlags.None, sender, client);
            client.BeginReciveMessages();
        }
Exemple #2
0
        // ##########################################################################################
        /// <summary> Funkcja przyłączająca klienta do serwera. </summary>
        /// <param name="asyncResult"> Podłączany klient. </param>
        private void AcceptClient(IAsyncResult asyncResult)
        {
            if (srvClients == null)
            {
                srvClients = new List <ClientData>();
            }

            try {
                Socket        socket  = srvSocket.EndAccept(asyncResult);
                AsyncCallback reciver = new AsyncCallback(ReciveCallback);
                ClientData    client  = new ClientData(socket, BufferSize, reciver);

                client.Identifier = srvIdCounter;
                client.Name       = string.Format("Client {0}", srvIdCounter.ToString());
                srvClients.Add(client);
                client.BeginReciveMessages();
                UpdateUI("( i ) Registered new Client with ID: " + srvIdCounter.ToString());
                UpdateUI("      and IPAddress: " + client.GetIPAddress());
            }
            catch (NullReferenceException) { /* srvSocket is current NULL */ }
            catch (ObjectDisposedException) { /* srvSocket set to NULL */ }

            StartListen();
        }
Exemple #3
0
        // ------------------------------------------------------------------------------------------
        /// <summary> Funkcja odbierająca wiadomość od klienta. </summary>
        /// <param name="asyncResult"> Podłączony klient. </param>
        private void ReciveCallback(IAsyncResult asyncResult)
        {
            try {
                ClientData client = (ClientData)asyncResult.AsyncState;
                Socket     socket = client.Socket;

                int    bufferSize = socket.EndReceive(asyncResult);
                byte[] buffer     = new byte[bufferSize];

                if (bufferSize == 0)
                {
                    LoopReconnect(asyncResult, client); return;
                }
                else
                {
                    client.ReconnectAttempt = 0;
                }

                Array.Copy(client.Buffer, buffer, bufferSize);
                Message newMessage = Message.ReadMessage(Encoding.ASCII.GetString(buffer));

                //  Deszyfrowanie wiadomości po otrzymaniu.
                if (client.Encrypted)
                {
                    ICrypt encryptionServices = null;
                    switch (client.CryptType)
                    {
                    case CryptType.RSA:
                        encryptionServices = encryptionServicesRSA;
                        break;

                    case CryptType.ElGamal:
                        encryptionServices = encryptionServicesElGamal;
                        break;
                    }
                    newMessage.Decrypt(encryptionServices, client.Encrypted);
                }

                bool executed = ExecuteClientCommand(newMessage, client);

                if (!executed)
                {
                    int    senderId  = newMessage.senderId;
                    int    reciverId = newMessage.reciverId;
                    string sendDate  = newMessage.sendDate.ToString();

                    if (reciverId == 0)
                    {
                        UpdateUI(sendDate + " [ " + client.Name + " ] " + Environment.NewLine + newMessage.message);
                    }
                    else
                    {
                        SendMessage(GetClient(reciverId), newMessage);
                    }
                }

                client.BeginReciveMessages();
            }
            catch (NullReferenceException) { /* socket is currently NULL */ }
            catch (ObjectDisposedException) { /* socket is currently NULLable */ }
            catch (SocketException) { /* socket is currently Disconected */ }
        }