示例#1
0
 public static void HandleCallbackRequest(DataPackages.Template.DataPackage dataPackage, Client client)
 {
     if (dataPackage.Data == "callback_server")
     {
         if (CallbackDoSProtection.CheckOnCallbackDos(client))
         {
             Events.DataPackageEvent.Callback.OnCallback(new Events.Args.CallbackEventArgs()
             {
                 client = client, dataPackage = dataPackage, Message = "Callback von Client " + client.Username + " erhalten"
             });
             Resources.XML.SendDataPackage(client, DataPackages.PacketManager.CreatePacket("callback_reply", "NULL", DataPackages.Template.PacketKind.DataExchange));
         }
         else
         {
             Events.DataPackageEvent.Callback.OnCallback(new Events.Args.CallbackEventArgs()
             {
                 client = client, dataPackage = dataPackage, Message = "[Warnung] Callback von Client " + client.Username + " geblockt!"
             });
         }
         client.RequestedCallbacks.Add(new Template.Callback()
         {
             TimeStamp = DateTime.Now, Username = client.Username
         });
     }
     else if (dataPackage.Data == "callback_reply")
     {
         Events.DataPackageEvent.Callback.OnCallback(new Events.Args.CallbackEventArgs()
         {
             client = client, dataPackage = dataPackage, Message = "Callback-Bestätigung von " + client.Username + " erhalten."
         });
     }
 }
示例#2
0
        public static string GetPacketName(DataPackages.Template.DataPackage dataPackage)
        {
            if (dataPackage.Packet == Template.PacketKind.DataExchange)
            {
                return("SV:DATEX.PACK_" + PacketCounter);
            }
            else if (dataPackage.Packet == Template.PacketKind.DownloadRequest)
            {
                return("SV:DLREQ.PACK_" + PacketCounter);
            }
            else if (dataPackage.Packet == Template.PacketKind.Message)
            {
                return("SV:MSG.PACK_" + PacketCounter);
            }
            else if (dataPackage.Packet == Template.PacketKind.UploadRequest)
            {
                return("SV:ULREQ.PACK_" + PacketCounter);
            }
            else if (dataPackage.Packet == Template.PacketKind.BugReport)
            {
                return("SV:BGRP.PACK_" + PacketCounter);
            }

            PacketCounter++;
            return("SV:UNINITIALIZED.PACK_" + PacketCounter);
        }
        public static void RaiseHandleEvent(DataPackages.Template.DataPackage dataPackage, Client client)
        {
            //Paket wird beim PacketAdministrator registriert
            PackageAdministrator.PacketReceived(dataPackage, client);

            //Event ClientPackageReceived wird getriggert
            Events.ClientEvents.PackageReceived.OnClientPackageReceived(new Events.Args.ClientEventArgs()
            {
                client = client
            });

            if (dataPackage.Packet == Template.PacketKind.DataExchange)
            {
                Evaluation.EvaluateDataExchangePacket.GetCommand(client, dataPackage);
            }
            else if (dataPackage.Packet == Template.PacketKind.DownloadRequest)
            {
                Handle.Download.EvaluateRequest.CreateRequest(new Events.Args.DataPackageEventArgs()
                {
                    client = client, dataPackage = dataPackage
                });
                Events.DataPackageEvent.DownloadRequest.OnDownloadRequestReceived(new Events.Args.DataPackageEventArgs()
                {
                    client = client, dataPackage = dataPackage
                });
            }
        }
 public static void GetCommand(Client client, DataPackages.Template.DataPackage dataPackage)
 {
     try
     {
         if (dataPackage.Data == "send_songs")
         {
             Handle.CommandResponder.SongList.Send(client);
         }
         else if (dataPackage.Data.Contains("callback"))
         {
             DataPackages.Callback.CallbackHandler.HandleCallbackRequest(dataPackage, client);
         }
         else if (dataPackage.Data == "send_home_screen")
         {
             Handle.CommandResponder.HomeScreen.Send(client);
         }
         else if (dataPackage.Data == "song_query:request")
         {
             string SearchResults = Resources.Services.EvaluateSongQuery(dataPackage.Params);
             Resources.XML.SendDataPackage(client, DataPackages.PacketManager.CreatePacket("song_query:reply", SearchResults, DataPackages.Template.PacketKind.DataExchange));
         }
         else if (dataPackage.Data == "song_clicked")
         {
             MetaData.MetaFileAdministrator.ClickCounterUp(dataPackage.Params);
         }
     }
     catch (Exception ex)
     {
         Events.ErrorEvents.EvaluationError.OnErrorAppeared(new Events.Args.ErrorEventArgs()
         {
             ErrorMessage = "Fehler bei der Auswertung eines DataExchange-Packets." + ex.Message + ex.StackTrace
         });
     }
 }
示例#5
0
 public static void Send(Client clien)
 {
     DataPackages.Template.DataPackage dataPackage = new DataPackages.Template.DataPackage();
     dataPackage.Data   = "song_list";
     dataPackage.Packet = DataPackages.Template.PacketKind.DataExchange;
     dataPackage.Params = FileManager.InformationProvider.ListedSongs;
     dataPackage.Name   = DataPackages.PackageAdministrator.GetPacketName(dataPackage);
     Resources.XML.SendDataPackage(clien, dataPackage);
 }
示例#6
0
        public static void HandleClient(Client client)
        {
            //Das OnClientLoggedIn Event wird ausgelöst, d.h. ein neuer Client hat sich verbunden
            Events.ClientEvents.ClientLoggedIn.OnClientLoggedIn(new Events.Args.ClientEventArgs()
            {
                client = client
            });

            //Das lokale Datenpacket in das alle eingehenden Datenpakete geschrieben werden
            DataPackages.Template.DataPackage dataPacket = new DataPackages.Template.DataPackage();
            //Buffer für den NetworkStream
            byte[] data = new byte[4096]; // 4KB Buffer => Datenpackete die von Clients gesendet werden dürfen nicht < 4KB sein, ansonsten wird die Verbindung zu diesen Clients getrennt
            while (true)
            {
                try
                {
                    //Daten werden von NetworkStream gelesen und sind in Bytes Codiert
                    client.stream.Read(data, 0, data.Length);

                    //Decodierung aus den Bytes zu einem String, der String enthält XML-Code
                    string Datstr = ASCIIEncoding.ASCII.GetString(data);
                    //Der im String enthaltene XML Code wird zu einem Connection.DataPackages.Template.DataPackage Objekt deserialisiert und ist damit ein lesbares Datenpacket
                    dataPacket = Resources.XML.DeserializeFromXml <DataPackages.Template.DataPackage>(Datstr);
                    //Das Datenpacket wird ausgewertet
                    DataPackages.EvaluatePackage.RaiseHandleEvent(dataPacket, client);

                    //Der Buffer des NetworkStreams wird zurückgesetzt
                    Array.Clear(data, 0, data.Length);
                    //Das Datenpacket wird zurückgesetzt, damit es neu beschrieben werden kann
                    DataPackages.PacketManager.ClearPacket(dataPacket);
                }
                catch (SocketException)
                {
                    //Disconnect des Clients ausführen
                    client.DisconnectClient();
                    break;
                }
                catch (System.IO.IOException)
                {
                    //Disconnect des Clients ausführen
                    client.DisconnectClient();
                    break;
                }
                catch
                {
                    //Bei Fehlern, verlorener Verbindung etc. wird die Verbindung zum Client am Socket korrekt getrennt und der Client wird als Offline registriert
                    Events.ErrorEvents.ConnectionError.OnErrorAppeared(new Events.Args.ErrorEventArgs()
                    {
                        ErrorMessage = "Fehler beim Empfangen eines Datenpackets, die Verbindung zum Client wird getrennt!"
                    });
                    client.DisconnectClient();
                    break;
                }
            }
        }
 public void Delete()
 {
     this.Name        = null;
     this.FileName    = null;
     this.dataPackage = null;
 }