Home

Add

Edit

Without Linenumbers

Code in Textfield

Download

  1. #DEFINE TSNE_SUBCALLBACK        'eine variante in TSNE, um CallbackPointer in den Callbacks nutzen zu können
    
  2. #INCLUDE "TSNE_V3.bi"
    
  3. 
    
  4. 
    
  5. 
    
  6. Type UserUDT
    
  7.     V_Zahl  As Integer
    
  8.     V_Input As String
    
  9. End Type
    
  10. 
    
  11. 
    
  12. 
    
  13. Sub TSNE_Disconnected(Byval V_TSNEID As Uinteger, Byval V_CallBackPtr As UserUDT Ptr)
    
  14. If V_CallBackPtr = 0 Then Exit Sub
    
  15. Deallocate(V_CallBackPtr)       'Den Temporär erzeugten Speicher für diese Verbindung wieder löschen
    
  16. End Sub
    
  17. 
    
  18. 
    
  19. 
    
  20. Sub TSNE_NewData (Byval V_TSNEID As Uinteger , Byref V_Data As String, Byval V_CallBackPtr As UserUDT Ptr)
    
  21. If V_CallBackPtr = 0 Then Exit Sub
    
  22. With *V_CallBackPtr     'Wir greifen auf die Datenstruktur des Pointers zu.
    
  23.     For X As Uinteger = 1 To Len(V_Data)    'die eingabe Byte für Byte verarbeiten
    
  24.         Select Case V_Data[X - 1]
    
  25.             Case 8 'rückschritt
    
  26.                 .V_Input = Mid(.V_Input, Len(.V_Input) - 1)
    
  27.                 
    
  28.             Case 10, 13 'enter
    
  29.                 If .V_Input <> "" Then 'wenn eingabe nicht leer
    
  30.                     TSNE_DATA_SEND V_TSNEID, Chr(13, 10)
    
  31.                     If .V_Zahl > Val(.V_Input) Then 'wenn eingabe kleine
    
  32.                         TSNE_DATA_SEND V_TSNEID, Chr(13, 10) & "zu klein" & Chr(13, 10)
    
  33.                     Elseif .V_Zahl < Val(.V_Input) Then 'wenn eingabe größer
    
  34.                         TSNE_DATA_SEND V_TSNEID, Chr(13, 10) & "zu gross" & Chr(13, 10)
    
  35.                     Else 'wenn gleich gross
    
  36.                         TSNE_DATA_SEND V_TSNEID, Chr(13, 10) & Str(.V_Zahl) & " ist richtig" & Chr(13, 10)
    
  37.                         .V_Zahl = -1
    
  38.                         TSNE_DATA_SEND V_TSNEID, Chr(13, 10) & "Noch eine Runde? [j / n]" & Chr(13, 10)
    
  39.                     End If
    
  40.                     Print "ID:"; V_TSNEID; "  Zahl:"; .V_Zahl; "  Eingabe:"; .V_Input
    
  41.                     .V_Input = ""
    
  42.                 End If
    
  43.                 
    
  44.             Case 48 To 57 'zahlen hinzufügen
    
  45.                 .V_Input += Chr(V_Data[X - 1])
    
  46.                 
    
  47.             Case 106 'j
    
  48.                 If .V_Zahl = -1 Then    'nur dann eine neue zahl erzeugen, wenn diese erraten wurde
    
  49.                     .V_Zahl = Int((Rnd * 1000) + 1)
    
  50.                     TSNE_DATA_SEND V_TSNEID, Chr(13, 10)
    
  51.                     TSNE_DATA_SEND V_TSNEID, "Nächste Zahl bereit!" & Chr(13, 10)
    
  52.                 End If
    
  53.                 
    
  54.             Case 110 'n
    
  55.                 If .V_Zahl = -1 Then    'nur dann eine neue zahl erzeugen, wenn diese erraten wurde
    
  56.                     TSNE_Disconnect(V_TSNEID)
    
  57.                     Exit Sub
    
  58.                 End If
    
  59.                 
    
  60.             Case 113 'q (exit)
    
  61.                 TSNE_Disconnect(V_TSNEID)
    
  62.                 Exit Sub
    
  63.                 
    
  64.         End Select
    
  65.     Next
    
  66. End With
    
  67. End Sub
    
  68. 
    
  69. 
    
  70. 
    
  71. Sub TSNE_NewConnection(Byval V_TSNEID As Uinteger , Byval V_RequestID As Socket , Byval V_IPA As String)
    
  72. Dim TPtr As UserUDT Ptr
    
  73. Dim NewTSNEID As Uinteger
    
  74. Dim RV As Integer
    
  75. TPtr = Callocate(Sizeof(UserUDT))       'Einen neuen Speicher für diese Verbindung erzugen. Diese hält spter alle infos des users
    
  76. TPtr->V_Zahl = Int((Rnd * 1000) + 1)    'Nach dem erzeugen des Speichers, können wir eine Zufallszahl festlegen
    
  77. RV = TSNE_Create_Accept(V_RequestID, NewTSNEID, , @TSNE_Disconnected, 0, @TSNE_NewData, , , , TPtr) 'Hier übergeben wir den SpeicherPointer an die Callbackstrukturen
    
  78. If RV <> TSNE_Const_NoError Then
    
  79.     Deallocate(TPtr)        'Wenn ein Fehler aufgetreten ist, müssen wir auch den Speicher wieder löschen
    
  80.     Print "[ACCEPT] [FEHLER] " & TSNE_GetGURUCode(RV)
    
  81.     Exit Sub
    
  82. End If
    
  83. Print NEWTSNEID
    
  84. 
    
  85. 'umgehen von telnet-kommandos. Es wird 1sek. gewartet, bis alle steuerbefehler eingegangen sind.
    
  86. 'dann wird der eingangsspeicher geleert.
    
  87. Sleep 1000, 1
    
  88. TPtr->V_Input = ""
    
  89. 
    
  90. TSNE_DATA_SEND NewTSNEID , "Herzlich Wilkommen" & Chr (13 , 10) & _
    
  91. "Rate eine Zahl zwischen 1 und 1000" & Chr (13 , 10)
    
  92. End Sub
    
  93. 
    
  94. 
    
  95. 
    
  96. Randomize Timer
    
  97. Dim G_Server_TSNEID As Uinteger
    
  98. Dim RV As Integer
    
  99. Print "Create Server..."
    
  100. Do
    
  101.     RV = TSNE_Create_Server(G_Server_TSNEID , 48660 , 100 , @TSNE_NewConnection , 0)
    
  102.     If RV = TSNE_Const_NoError Then Exit Do
    
  103.     Sleep 1000, 1
    
  104. Loop
    
  105. Print "running"
    
  106. Do Until Inkey() = Chr(27)
    
  107.     Sleep 1, 1
    
  108. Loop
    
  109. Print "exiting..."
    
  110. TSNE_Disconnect(G_Server_TSNEID)
    
  111. TSNE_WaitClose(G_Server_TSNEID)
    
  112. End 0
    
  113. 
    
  114.