B4J Library [B4X] xHttpServer (Http Server + jQuery)

Star-Dust

Expert
Licensed User
Longtime User
Update 0.74
  • Completed jQuery class
  • Extended WebSocket example and completed in all its parts





If you want to understand more about jQuery go to this thread
 
Last edited:

Star-Dust

Expert
Licensed User
Longtime User
Here you can try the example of a queue eliminator made with xHttpServer and WebSocket. The server is B4X, the client uses the browser of the device
 

Star-Dust

Expert
Licensed User
Longtime User
Dear Star Dust!
Can you (urgently) enter an accessible boolean variable into the server that blocks the loading progress event?
When I have completed the work and tested, I will release the final version, for now consider it a beta version.

At the moment a connection is accepted, data streaming is handled by an instance of the ServletRequest class and an instance of the ServletResponse class. They are not managed by the httpServer main class.

Also Android 4+ doesn't allow apps to make network calls on the main thread (see here) so
 

VB6_man

Member
Hello!
Your example of downloading a file to a page works well. And opening pages through a GET request also works.
But any attempt to download the file, even by copying your entire code into my program, results in an error:

java.lang.ArrayIndexOutOfBoundsException: src.length=90498 srcPos=-1 dst.length=90499 dstPos=0 length=90499

Also, it is not clear how to upload the file on different pages. Let's say my boot page is different from the Upload File. And then what? It looks like your boot code doesn't distinguish between request addresses at all. Or I'm wrong.

I checked the downloads again in different versions, even just copied your code to a clean project. Same mistake. Where to dig?
 

VB6_man

Member
1) I seem to have defeated the first error. But I don’t know how.

2) But the second question is relevant: What if the page that receives and processes the image has a name other than FileUpload?
For example, in my script there is a case when the same page creates a form and receives a form response.
On your server, is the response going to a fixed address?
Here is my test case:
Page Index {
Router (GET: /index.html)
Router (POST: /index.html)
Template Index
GET {
s =' This GET-test and create Upload form'
up = Web.UploadFile ("/ Index.html", "Title", "Signature")
}

POST {
s = "This Post - test"
up = Web.a ('/ index.html', 'Home')
}
)
 

Star-Dust

Expert
Licensed User
Longtime User
I did not understand the question
 

Ibrahim Saleh

Member
Licensed User
Longtime User
@Star-Dust Can I create a video streaming app using this library. I want to play a video from the local folder and feed chunks of data into the video player. This can be done using a httpserver that reads part of the video file and send the correct data to the video player. I was not able to produce such a function using the original HttpServer from Erel. Altho I was able to do it using jHttpServer.
My question is will this new HttpServer be able to do such a thing. Thanks in advance.
 

Star-Dust

Expert
Licensed User
Longtime User
I am unable to answer this question. I have no experience about it.

To better understand what you mean I can't do with Erel's HttpServer but I can with jHttpServer? What instructions do you use? Perhaps with more details I can understand better
 

ilan

Expert
Licensed User
Longtime User

do you mean something like this:
 

wl

Well-Known Member
Licensed User
Longtime User
Just tried the IOS version, the HTTP sample application (as found in one of the first topics in this thread).
The application builds and runs fine, but when I click on 'click' nothing is being displayed in the web viewer ?

Any idea ?

Thanks
 

wl

Well-Known Member
Licensed User
Longtime User
Sorry, never mind. Was wrong: it runs, but I should have opened a browser
 

laguilar

Member
Licensed User
Longtime User
Seems this library no longer works. When publishing, it brings the same "ITMS-90338: Non-public API usage" error as the iReleaseLogger library and mentions the app has referenced non-public symbols: __NSSetLogCStringFunction
 

Star-Dust

Expert
Licensed User
Longtime User
Seems this library no longer works. When publishing, it brings the same "ITMS-90338: Non-public API usage" error as the iReleaseLogger library and mentions the app has referenced non-public symbols: __NSSetLogCStringFunction
Dear friend, I just tried and everything works fine.
I don't think I use iReleaseLogger in my examples. In any case it must be removed as indicated here. But is not a problem with my library.

Try one of my examples and see if that works
 

laguilar

Member
Licensed User
Longtime User
Dear friend, I just tried and everything works fine.
I don't think I use iReleaseLogger in my examples. In any case it must be removed as indicated here. But is not a problem with my library.

Try one of my examples and see if that works
I just tried again, as well. I don't really want to create useless app entries in my App Store Connect by uploading one of your examples. But see my steps below:

--B4I IDE--
1. Build Release App
2. Download Last Build
3. Upload To App Store
4. Check email, got email stating ITMS-90338: Non-public API usage - The app references non-public symbols in APP_NAME: __NSSetLogCStringFunction
5. Uncheck iHttpServer in Libraries Manager
6. Increment Version
7. Build Release App
8. Download Last Build
9. Upload To App Store
10. Check email, no warnings, and approves in App Store Connect for testflight.

Few things to note:
I am using the Hosted Builder as I have a windows machine I develop with.
I have tried the above steps with and without the "Clean Project" between builds, makes no difference.
In my libraries manager, everything appears to be up to date except 2 libraries (iHttpUtils2 and XUI Views).
I am using B4I v 7.80.
I've attached a screenshot that displays some of my project properties with identifiable information obscured.
 

Attachments

  • Capture.PNG
    123.2 KB · Views: 163

Star-Dust

Expert
Licensed User
Longtime User
It is not necessary to publish an example. You should run my example in DEBUG instead. To do this you need to change the package name.
I also use HOESTED BUILDER with windows.
If the example works, the problem is to be found in your App.

When you do this test tell me what the outcome is.

PS. Did it work for you before? Have you made any changes?
 

laguilar

Member
Licensed User
Longtime User
Your mis-understanding. Everything works fine in debug mode. I can include the ihttpserver or ireleaselogger, or any other library for that matter. But once I attempt to upload it to testflight, I get an email from apple saying the app has issues that need to be resolved, and they mention the "ITMS-90338: Non-public API usage - The app references non-public symbols in APP_NAME: __NSSetLogCStringFunction" issue.

The issue is not within my application. As I mentioned before, 2 attempts in a row to publish, the only difference being that iHttpServer library is checked in Library Manager. Without iHttpServer it approves just fine, and with, it fails and I get the above email from apple.
 
Cookies are required to use this site. You must accept them to continue using the site. Learn more…