
Originally Posted by
NoeX
posteresti mica la firma del metodo (il codice proprio) ? Vediamo se riesco a darti na mano
ok allora questo è il metodo inviaComando della superclasse stampante:
Code:
Protected Overridable Function inviaComando(ByVal comando As String, ByVal richiediRisposta As Boolean, _
ByVal ParamArray dati() As String) As Byte()
'la funzione stabilirà una connessione con l'applicatore e attenderà la risposta (fine ciclo o errore)
'bisogna impostare le stampanti per rispondere sempre dopo la stampa di un'etichetta
'aggiungere ciclo attesa risposta
Dim pcSocket As New System.Net.Sockets.TcpClient()
Dim applicatoreStream As NetworkStream
Dim messaggioOut As String = ""
Dim outStream As Byte()
Dim risposta As String = ""
pcSocket.Connect(Me.ip, Me.portaOut)
applicatoreStream = pcSocket.GetStream()
If dati.Count > 0 Then
For i As Integer = 0 To dati.Count - 1
messaggioOut = comando & dati.ElementAt(i) & Microsoft.VisualBasic.ControlChars.CrLf
outStream = System.Text.Encoding.ASCII.GetBytes(messaggioOut)
applicatoreStream.Write(outStream, 0, outStream.Length)
applicatoreStream.Flush()
Next
Else
messaggioOut = comando & Microsoft.VisualBasic.ControlChars.CrLf
outStream = System.Text.Encoding.ASCII.GetBytes(messaggioOut)
applicatoreStream.Write(outStream, 0, outStream.Length)
applicatoreStream.Flush()
End If
Dim inStream(pcSocket.ReceiveBufferSize) As Byte
If richiediRisposta = True Then
applicatoreStream.ReadTimeout = 3000
Try
applicatoreStream.Read(inStream, 0, CInt(pcSocket.ReceiveBufferSize))
applicatoreStream.Flush()
Catch ex As Exception
inStream = System.Text.Encoding.ASCII.GetBytes("null")
End Try
pcSocket.Close()
Return inStream
Else
inStream = System.Text.Encoding.ASCII.GetBytes("null")
pcSocket.Close()
Return inStream
End If
End Function
questo è un metodo della superclasse stampante che utilizza il metodo inviaComando:
Code:
Public Sub impostaRitornoStampa(ByVal attiva As Boolean)
If attiva = True Then
inviaComando("?50&2,1", False)
Else
inviaComando("?50&2,0", False)
End If
End Sub
questo invece è il metodo della sottoclasse stampanteSeriale che fa l'override (in questo caso tramite shadow perchè come dicevo prima ritorna un tipo di dato differente) del metodo inviaComando della superclasse stampante:
Code:
Protected Shadows Function inviaComando(ByVal comando As String, ByVal richiediRisposta As Boolean, _
ByVal ParamArray dati() As String) As String
Dim messaggioOut As String
Me.porta.Open()
If dati.Count > 0 Then
For i As Integer = 0 To dati.Count - 1
messaggioOut = comando & dati.ElementAt(i) & Microsoft.VisualBasic.ControlChars.CrLf
Me.porta.Write(messaggioOut)
Me.porta.DiscardOutBuffer()
Next
Else
messaggioOut = comando & Microsoft.VisualBasic.ControlChars.CrLf
Me.porta.Write(messaggioOut)
Me.porta.DiscardOutBuffer()
End If
If richiediRisposta = True Then
Dim risposta As String
Me.porta.ReadTimeout = 3000
Try
risposta = Me.porta.ReadExisting
Me.porta.Close()
Return risposta
Catch ex As Exception
Me.porta.Close()
Return "null"
End Try
Else
Me.porta.Close()
Return "null"
End If
End Function