Pack-Engine by VikenEmesh
Übersicht

![]() |
hazumu-kunBetreff: Pack-Engine by VikenEmesh |
![]() Antworten mit Zitat ![]() |
---|---|---|
Die Pack Engine ist eine Sammlung von Funktionen um Dateien, oder im
Allgemeinen Datenblöcke, über Netzwerk-streams zu senden und empfangen. Download (BB-Code,8kb) Code: [AUSKLAPPEN] ;#################################### ;# Datenpaket-Engine by Viken Emesh / ;# Version: 1.2 ;# Datum: 17.04.2009 ;# Kontakt: ;# e-Mail: kevin66@hotmail.de ;# ICQ: 294-793-975 ;# HINWEIS: Ein über Netzwerk gesendetes Paket beinhaltet ;# zusätzliche 4 Bytes um die Länge des Pakets für ;# den Befehl ReadString zu kennzeichnen. DebugLog "Initialisiere Pack-Engine by Viken Emesh..." Type Pack Field b_hndl Field b_size End Type Global PackOBJCount Function CreatePack% (inp_Stream, inp_Size) ;Erzeugt neues Paket und füllt es mit Daten aus ;dem angegebenem Stream. Wenn zu wenig Daten im ;Stream vorhanden sind, enthält das Paket Nullbytes. ;Existiert der Stream nicht werden keine Daten ;eingelesen. ;Parameter: ; inp_Stream % Stream auf den Read Befehle ; angewendet können. ; 0= Nur Paket erstellen ; inp_Size % Anzahl der Bytes die das Paket ; enthalten soll. (min.: 128) ; stream_Type % 0= Netzwerkstream ; 1= Dateistream ; ;Return: ; % Handle eines Pack-Objekts. ; -1 Bei falschen Parametern Local new_Pack.Pack= New Pack ;Paket erstellen new_Pack\b_hndl= CreateBank (inp_Size) new_Pack\b_size= inp_Size PackOBJCount= PackOBJCount+1 If inp_Stream Then ;Paket füllen Local bytecount For bytecount= 1 To inp_Size PokeByte new_Pack\b_hndl, bytecount-1, ReadByte (inp_Stream) If Eof (inp_Stream) Then ;Paket ggf. anpassen(DateiStream) Exit EndIf Next EndIf Return Handle (new_Pack.Pack) End Function Function GetPackSize% (inp_Handle) ;Gibt Größe eines Packets zurück. ;Parameter: ; inp_Handle % Handle eines Pack-Objects. ; ;Return: ; % Größe des Pakets in Byte. Local acc_Pack.Pack= Object.Pack(inp_Handle) Return acc_Pack\b_size End Function Function GetActivePackObjects% () ;Gibt zurück wieviele Pack-Objekte existieren. ;Return: ; % Anzahl der Pack-Objekte Return PackOBJCount End Function Function KillAllPackObjects% () ;Löscht alle Pack-Objekte. ;ACHTUNG: Zugriffe über Handles deren Objekt ; gelöscht wurde, erzeugt ; Speicherzugriffsverletzungen. ;Return: ; % Anzahl der Objekte die gelöscht wurden. Local oldcount= PackOBJCount Local del_Pack.Pack For del_Pack= Each Pack FreeBank del_Pack\b_hndl Delete del_Pack Next PackOBJCount= 0 Return oldcount End Function Function DeletePack (inp_Handle) ;Löscht erst die Bank des Pakets ;und dann das Pack-Object. ;Parameter: ; inp_Handle % Handle eines Pack.Objects ;Return: ; [void] Local acc_Pack.Pack= Object.Pack(inp_Handle) FreeBank acc_Pack\b_hndl Delete acc_Pack PackOBJCount= PackOBJCount-1 End Function Function ReadPack% (out_Handle, inp_Stream) ;Füllt ein vorhandenes Paket mit Daten aus einem ;Stream. Wenn der Stream zu wenig Daten enthält, ;wird das Paket entsprechend verkleinert. ;Parameter: ; inp_Handle % Handle eines Pack-Objekts. ; inp_Stream % Stream auf den Read-Befehle ; angewendet werden können. ;Return: ; % Anzahl der Bytes die geschrieben wurden. Local acc_Pack.Pack= Object.Pack(out_Handle) Local inp_Size= acc_Pack\b_size Local bytesavail= ReadAvail (inp_Stream) ;Paket ggf. anpassen(NetzwerkStream) If bytesavail<inp_Size And bytesavail<>0 Then inp_Size= bytesavail ResizeBank acc_Pack\b_hndl,inp_Size EndIf Local bytecount ;Paket füllen For bytecount= 1 To inp_Size PokeByte acc_Pack\b_hndl, bytecount-1, ReadByte (inp_Stream) If Eof (inp_Stream) Then ;Paket ggf. anpassen(DateiStream) ResizeBank acc_Pack\b_hndl,bytecount Exit EndIf Next Return bytecount End Function Function WritePack% (inp_Handle, out_Stream) ;Schreibt den Inhalt eines Pakets in eine Datei. ;Parameter: ; inp_Handle % Handle eines Pack-Objekts. ; out_Stream % Dateistream zur Ausgabe. ;Return: ; % Anzahl der geschriebenen Bytes. Local acc_Pack.Pack= Object.Pack(inp_Handle) Return WriteBytes (acc_Pack\b_hndl,out_Stream,0,acc_Pack\b_size) End Function Function WritePack2Bank% (inp_Handle, out_Handle, out_Start=0) ;Speichert den Inhalt eines Pakets in eine Bank. ;Wenn die Bank zu klein sein sollte werden nicht alle ;Daten kopiert. ;Parameter: ; inp_Handle % Handle eines Pack-Objekts. ; out_Handle % Handle der Bank. ; out_Start % Startposition in der Bank (ab 0). ;Return: ; % Anzahl der kopierten Bytes. Local acc_Pack.Pack= Object.Pack(inp_Handle) Local CopyLength, out_Size= BankSize(out_Handle) ;Kopierlänge anpassen If out_Start+acc_Pack\b_size>out_Size-1 Then CopyLength= (out_Size-1)-out_Start+1 Else CopyLength= acc_Pack\b_size+1 EndIf CopyBank acc_Pack\b_hndl,0,out_Handle,out_Start,CopyLength Return CopyLength End Function Function WriteBank2Pack% (inp_Handle, out_Handle, inp_Start=0, inp_Length=0) ;Kopiert den Inhalt des festgelegten Bereichs in ;einer Bank in das Paket. Sollte das Paket zu ;klein oder zu groß für die Datenmenge sein, ;wird es entsprechend angepasst. ;Parameter: ; inp_Handle % Handle der Bank ; out_Handle % Handle eines Pack-Objects. ; inp_Start % Startposition in der Bank zum ; Kopieren. ; (0= Ab Anfang kopieren.) ; inp_Length % Datenmenge in Byte die kopiert ; werden soll. ; (0= maximal mögliche Menge= Pack_Size) ; ;Return: ; % Anzahl der kopierten Bytes Local acc_Pack.Pack= Object.Pack(out_Handle) Local inp_Size= BankSize (inp_Handle) ;Kopierlänge anpassen If inp_Length>inp_Size Then inp_Length=inp_Size Local CopyLength Local out_Size= acc_Pack\b_size If inp_Length=0 Then inp_Length= out_Size EndIf If inp_Length>=out_Size Then CopyLength= out_Size Else CopyLength= inp_Length EndIf CopyBank inp_Handle,inp_Start,acc_Pack\b_hndl,0,CopyLength Return CopyLength End Function Function SendPack% (inp_Handle, net_Stream) ;Versendet ein Paket durch einen TCP Stream. ;Parameter: ; inp_Handle % Handle eines Pack-Objects. ; net_Stream % TCP NetzwerkStream. ; ;Return: ; % Anzahl der gesendeten Bytes. Local acc_Pack.Pack= Object.Pack(inp_Handle) Local Pack_Data$ Local Pack_Size= acc_Pack\b_size Local Pack_Bank= acc_Pack\b_hndl Local i For i= 1 To Pack_Size Pack_Data$= Pack_Data$+ Chr$(PeekByte(Pack_Bank,i-1)) Next WriteString net_Stream,Pack_Data$ Return Pack_Size End Function Function RecvPack% (out_Handle, net_Stream) ;Füllt ein Paket mit Daten aus einem TCP Stream. ;Bytes die nicht in das Paket reinpassen werden ;verworfen. ;Parameter: ; out_Handle % Handle eines Pack-Objects. ; net_Stream % TCP NetzwerkStream. ; ;Return: ; % Anzahl der empfangenen Bytes. Local acc_Pack.Pack= Object.Pack(out_Handle) Local Pack_Data$ Local Pack_Size= acc_Pack\b_size Local Pack_Bank= acc_Pack\b_hndl Pack_Data$= ReadString$ (net_Stream) Local i For i= 1 To Pack_Size PokeByte Pack_Bank,i-1,Asc(Mid$(Pack_Data$,i,1)) Next Return Pack_Size End Function DebugLog "Pack-Engine initialisiert!" ;# ;# End-Of-Engine \ ;################# Über Kritik würde ich mich freuen! MFG EDIT: Hier ein Stück Source zum Testen der Engine: Code: [AUSKLAPPEN] Include "Pack_Engine.eng.bb" Stop .Prompt Local mode$= Input$("[S]erver oder [C]lient?: ") Local server,client Local Pack Local File Local File_Size Select Upper$(mode$) Case "S" File= ReadFile ("TEST.TXT") ;Paket erstellen File_Size= FileSize ("TEST.TXT") Pack= CreatePack (File,File_Size) Stop server= CreateTCPServer (21) ;Paket versenden While Not client Print "Warte auf Clienten." client= AcceptTCPStream (server) Delay 100 Wend WriteLine client,File_Size While Not ReadAvail (client) Wend ReadLine$ (client) Delay 500 Print SendPack (Pack,client)+" Bytes gesendet!" Input("Enter Drücken zum Beenden.") CloseTCPStream client CloseTCPServer server End Case "C" server= OpenTCPStream ("127.0.0.1",21) Local Pack_Size= ReadLine$ (server) Pack= CreatePack (0,Pack_Size) WriteLine server,"Okay" While Not ReadAvail (server) Print "Warte auf Daten..." Delay 100 Wend Print ReadAvail (server)+" Bytes bereit!" Print RecvPack (Pack,server)+" Bytes empfangen!" CloseTCPStream server File= WriteFile ("RECV.TXT") Print WritePack (Pack,File)+" Bytes geschrieben!" Input("Enter Drücken zum Beenden.") Default Print "Falsche Eingabe!" Goto Prompt End Select * Juhuuu 800tes Topic * *freu* |
||
![]() |
hazumu-kun |
![]() Antworten mit Zitat ![]() |
---|---|---|
* push *
Man Leute ich brauch FeedBack. |
||
Warum kann es keine omnipotente Macht geben?
Weil diese omnipotente Macht in der Lage sein müsste, einen so schweren Stein zu schaffen, dass sie ihn nicht heben kann -> nicht omnipotent |
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Push macht Trash, also lass das. | ||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
![]() |
hazumu-kun |
![]() Antworten mit Zitat ![]() |
---|---|---|
Okay. Aber trotzdem wärs schön wenn ich Kritik bekommen würde. | ||
Warum kann es keine omnipotente Macht geben?
Weil diese omnipotente Macht in der Lage sein müsste, einen so schweren Stein zu schaffen, dass sie ihn nicht heben kann -> nicht omnipotent |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group