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." }); } }
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 }); } }
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); }
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; }