Android question: how to connect to swank, running on android?
PR
polos.ruetz at gmail.com
Sun Aug 20 19:39:40 UTC 2017
2017-08-19 23:25 GMT+02:00, Daniel Kochmański <daniel at turtleware.eu>:
> AFAIR I was connecting over wifi to the REPL on my Android device.
>
> If the port forwarding works fine - do you have some logs either from
> emacs or running ECL process which show what's going on?
ok, just to report the current state:
- if I run '(start-swank)' from the desktop (same sources as on
android), it works locally
- PC and tablet are connected via USB
- both PC and tablet are in the same wlan, and can ping each other
- port forwarding is enabled: 'adb forward tcp:4005 tcp:4005'
- if I try to connect from the PC to Swank running on the tablet,
Emacs logs these messages:
<snip Emacs messages>
Connecting to Swank on port 4005..
Lisp connection closed unexpectedly: connection broken by remote peer
error in process filter: if: Lisp connection closed unexpectedly
error in process filter: Lisp connection closed unexpectedly
Error running timer `slime-process-available-input': (error
"Selecting deleted buffer")
</snip Emacs messages>
So, still no luck...
Paul
>
> Daniel
>
>
> On 19.08.2017 22:24, PR wrote:
>> thanks to both of you, but it still doesn't work.
>>
>> From the PC, I did:
>>
>> $ adb forward tcp:4005 tcp:4005
>>
>> so, this part works.
>>
>> Daniel, I already "stole" the functions from the "ecl-android" project
>> (prior to post my question); without them I would have been lost...
>>
>> So, I'll have to play around a little... Of course I will post the
>> solution here, if I get it to work.
>>
>> Paul
>>
>>
>> 2017-08-19 17:27 GMT+02:00, Daniel Kochmański <daniel at turtleware.eu>:
>>> Hello,
>>>
>>> swank listens by default only for localhost connections (for a good
>>> reason!). To force it to listen for connections from specific host other
>>> than 127.0.0.1 you have to bind swank::*loopback-interface* to it. For
>>> instance to listen for connections from everywhere on port 4005 you
>>> could use functions from
>>> https://gitlab.common-lisp.net/ecl/ecl-android/blob/master/assets/lisp/etc/user.lisp
>>>
>>> (defun start-swank ()
>>> (format t "Starting swank server~%")
>>> (mp:process-run-function
>>> "SLIME-listener"
>>> (lambda ()
>>> (let ((swank::*loopback-interface* "0.0.0.0"))
>>> (swank:create-server :port 4005
>>> :dont-close t
>>> ;; :style nil #|:spawn|#
>>> )))))
>>>
>>> (defun stop-swank ()
>>> (format t "Stopping swank server~%")
>>> (swank:stop-server 4005)
>>> (format t ";; Swank off-line~%"))
>>>
>>> Note, that newest slime/swank should support :spawn communication style
>>> just fine with ECL (my PR was merged lately). In that case it should be
>>> enough to call create-server which won't block (note that in the example
>>> above we create separate thread for that).
>>>
>>> Since ECL isn't run from CLI but as shared library, it is useful to
>>> define implementation for implementation program (don't remeber for
>>> sure, but I think lack of this caused some problems later)
>>>
>>> (defimplementation lisp-implementation-program ()
>>> "Return the argv[0] of the running Lisp process, or NIL."
>>> "org.lisp.ecl")
>>>
>>> Hope this helps.
>>>
>>> Best regards,
>>>
>>> Daniel
>>>
>>>
>>> On 19.08.2017 16:32, PR wrote:
>>>> Hi again,
>>>>
>>>> so, the progress of the new android REPL is going well, it already
>>>> runs Quicklisp and can start swank, and right there I'm stuck now:
>>>> How does one connect from the local computer to the android device,
>>>> which is running the SLIME-listener?
>>>>
>>>> They are connected via USB, and the device is /not/ rooted.
>>>>
>>>> Since this is certainly of public interest, I ask here, thanks for any
>>>> help!
>>>> Below the link to the current APK of the REPL (you'll need android
>>>> version >= 4.1, API >= 16):
>>>>
>>>> http://lights-of-holiness.eu/tmp/repl.apk
>>>>
>>>> After launching the app, do (there is currently no feedback of the
>>>> progress, sorry):
>>>>
>>>> (quicklisp) ; should take less than a minute, with a fast
>>>> internet
>>>> connection
>>>> (start-swank) ; same as above (needs to byte-compile all
>>>> 'contribs')
>>>>
>>>> If I run:
>>>>
>>>> (mp:all-processes)
>>>>
>>>> it lists the running "SLIME-listener" process, so it seems to work...
>>>>
>>>> Thanks for any help!
>>>>
>>>> Paul
>>>>
>>>
>
>
More information about the ecl-devel
mailing list