'Run tests on brstest
function main()
print "MAIN...."
messagePort = CreateObject("roMessagePort")
connections = {}
buffer = CreateObject("roByteArray")
buffer[512] = 0
tcpListen = CreateObject("roStreamSocket")
tcpListen.setMessagePort(messagePort)
addr = CreateObject("roSocketAddress")
addr.setPort(54321)
tcpListen.setAddress(addr)
tcpListen.notifyReadable(true)
tcpListen.notifyWritable(true)
x = tcpListen.listen(4)
if not tcpListen.eOK()
print "Error creating listen socket"
stop
end if
while True
event = wait(0, messagePort)
if type(event) = "roSocketEvent"
print "GOT HERE"
changedID = event.getSocketID()
if changedID = tcpListen.getID() and tcpListen.isReadable()
newConnection = tcpListen.accept()
if newConnection = Invalid
print "accept failed"
else
print "accepted new connection " newConnection.getID()
newConnection.notifyReadable(true)
newConnection.setMessagePort(messagePort)
connections[Stri(newConnection.getID())] = newConnection
end if
else
' Activity on an open connection
connection = connections[Stri(changedID)]
closed = False
if connection.isReadable()
received = connection.receive(buffer, 0, 512)
print "received is " received
if received > 0
print "Echo input: '"; buffer.ToAsciiString(); "'"
' If we are unable to send, just drop data for now.
' You could use notifywritable and buffer data, but that is
' omitted for clarity.
connection.send(buffer, 0, received)
else if received=0 ' client closed
closed = True
end if
end if
if closed or not connection.eOK()
print "closing connection " changedID
connection.close()
connections.delete(Stri(changedID))
end if
end if
end if
end while
print "Main loop exited"
tcpListen.close()
for each id in connections
connections[id].close()
end for
end function
------ Compiling dev 'Socket Test' ------
------ Running dev 'Socket Test' main ------
MAIN....
GOT HERE
accepted new connection 87031814
GOT HERE
received is 1
Echo input: 'h'
GOT HERE
received is 1
Echo input: 'e'
GOT HERE
received is 1
Echo input: 'l'
GOT HERE
received is 1
Echo input: 'l'
GOT HERE
received is 1
Echo input: 'o'
MAIN...
$ telnet 10.65.94.89 54321
Trying 10.65.94.89...
Connected to 10.65.94.89.
Escape character is '^]'.
hello
"Cwright017" wrote:
I'm trying to open a tcp socket from my Roku 3 for the purpose of reporting test results (instead of using the native debug console)
I've copied the example for roStreamSocket - but it doesn't work, at all.
...
Is what I have in my main.brs - and it listens, and I seem to be able to telnet to the port - but it reports no connection event, nor does it report any data sent to it - and the event isn't of type string, but of type function 😕
"RokuKC" wrote:
If the latter, make sure you don't have a function/sub named 'event' somewhere. 🙂
Hello belltown,
I tried to make a web server in the Roku Application. I used the above code is below here.
Here It crashes after Print Start While Loop.
sub init() ? "Start Main()" m.port = CreateObject("roMessagePort") connections = {} buffer = CreateObject("roByteArray") buffer[512] = 0 tcpListen = CreateObject("roStreamSocket") tcpListen.SetMessagePort(m.port) addr = CreateObject("roSocketAddress") addr.setPort(54321) ? "addr.IsAddressValid() : " addr.IsAddressValid()
tcpListen.setAddress(addr) ' Here Automatic set 0.0.0.0 IP tcpListen.notifyReadable(true) tcpListen.notifyWritable(true)
x = tcpListen.listen(5) if not tcpListen.eOK() ? "Error creating listen socket" STOP end if while true ? "Start While Loop" msg = Wait(0, m.port) ? "msg : "msg ? "Type(msg) : " Type(msg) if (Type(msg) = "roSocketEvent") ? "GOT HERE" changedID = msg.getSocketID() if changedID = tcpListen.getID() and tcpListen.isReadable() newConnection = tcpListen.accept() if newConnection = invalid ? "accept failed" else ? "accepted new connection " newConnection.getID() newConnection.notifyReadable(true) newConnection.SetMessagePort(m.port) connections[StrI(newConnection.getID())] = newConnection end if else ' Activity on an open connection connection = connections[StrI(changedID)] closed = false if connection.isReadable() received = connection.receive(buffer, 0, 512) ? "received is " received if received > 0 connection.send(buffer, 0, received) else if received = 0 ' client closed closed = true end if end if if closed or not connection.eOK() ? "closing connection " changedID connection.close() connections.delete(StrI(changedID)) end if end if end if ? "End While Loop" end while ? "Main loop exited" tcpListen.close() for each id in connections connections[id].close() end for ? "End Main()" end sub
I tried to Run this code in Roku Premiere +. I also Read the namming Scope. But I dont know why it doesn't work. you have any idea about this.
Thank you