https://github.com/brainpoint/febs-java
The common libraries in fluent api. Most api is like javascript.
https://github.com/brainpoint/febs-java
febs fetch java-js net promise promise-java stage thread threadpool
Last synced: 29 days ago
JSON representation
The common libraries in fluent api. Most api is like javascript.
- Host: GitHub
- URL: https://github.com/brainpoint/febs-java
- Owner: brainpoint
- License: mit
- Created: 2020-04-29T06:18:24.000Z (almost 6 years ago)
- Default Branch: master
- Last Pushed: 2020-10-13T21:35:47.000Z (over 5 years ago)
- Last Synced: 2024-12-30T07:11:50.679Z (about 1 year ago)
- Topics: febs, fetch, java-js, net, promise, promise-java, stage, thread, threadpool
- Language: Java
- Homepage:
- Size: 105 KB
- Stars: 1
- Watchers: 2
- Forks: 0
- Open Issues: 1
-
Metadata Files:
- Readme: readme.md
- License: LICENSE
Awesome Lists containing this project
README
# Febs
[](https://maven-badges.herokuapp.com/maven-central/cn.brainpoint/febs/)
[](https://opensource.org/licenses/MIT)
Febs is a common libraries in fluent API. Most api is like javascript.
- [How to use](#how-to-use)
- [Asynchronous in ThreadPool](#Asynchronous-in-ThreadPool)
- [Asynchronous in Promise](#Asynchronous-in-Promise)
- [Network transfer in Fetch](#Network-transfer-in-Fetch)
- [Utilities](#Utilities)
## How to use
maven config.
```html
cn.brainpoint
febs
0.1.3
```
```js
import cn.brainpoint.febs;
//
// It will execute asynchronously after call `execute()`
//
PromiseFuture future = Febs.Net.fetch("https://xxx")
// get response status code.
.then(res->{
// code.
System.out.print(res.statusCode);
// message.
System.out.print(res.statusMsg);
// get text content.
return res.text();
})
.then(content->{
})
.execute();
//
// Can use `future.get()` to get result in synchronize.
//
String result = (String) future.get();
```
### config
It can initial with thread pool config. Thread pool will affect performance of promise.
```js
// Initial with thread pool config.
Febs.init(new Febs.ThreadPoolCfg(
2,
4,
20000,
new LinkedBlockingQueue<>(),
new ThreadPoolExecutor.AbortPolicy())
);
```
## Asynchronous in ThreadPool
Use `getExecutorService` api to get a asynchronous work item.
```js
try {
Future future
= Febs.getExecutorService.submit(()->{
// do anything in this thread.
return "any";
});
Object result = future.get();
} catch (ExecutionException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
```
## Asynchronous in Promise
Febs promise like javascript promise api, use chain list way to do asynchronous work.
- `.then`: same as js-es6 promise`.then` chain.
- `.fail`: same as js-es6 promise`.catch` chain.
- `.finish`: same as js promise`.finally` chain.
- `.execute`: It must be call to activate promise in Febs promise.
### Base scene
```js
/**
* Make a promise object.
*/
Promise promise = new Promise((IResolve resolve, IReject reject)-> {
// call this set status to 'fulfilled'
resolve.execute(retVal);
// call this set status to 'rejected'
reject.execute(new Exception(""));
});
/**
* chain.
*/
PromiseFuture = promise.then(res->{ })
.then(()->{ return 1; })
.then(res1->{ })
.fail(e->{ }) // same as javascript catch()
.finish(()->{}) // same as javascript finally()
.execute(); // activate promise.
/**
* Block until promise finish, if you want to wait.
*/
PromiseFuture.get();
```
### return another promise object in chain.
```js
promise.then(res->{
// this nest promise cannot call execute().
return new Promise((resolve, reject)->{
...
});
})
.then(res->{
})
.execute();
```
### all
```js
/**
* Promise object array.
* !Warning: All promise object cannot call execute() funciton.
*/
Promise[] promiseArr = {...};
/**
* execute all promise object.
*/
Promise.all(promiseArr)
.then(res->{
// all promise done.
})
.fail(e->{
// if some promise rejected.
})
.execute();
```
### template
The `then` and `fail` chain can return a object to next chain. The data type of return value is unkonw, we can use template to spacify a data type.
e.g.
```js
// Spacify a data type.
Promise promise = new Promise((IResolve resolve, IReject reject)-> {
resolve.execute(2);
});
// use the data type.
promise.then((Integer res)->{
// ...
})
.execute(); // execute promise.
```
### Uncaught Exception Handler
Some promise object will catch exception use this method, if it have't call `.fail()`
```js
Promise.setUncaughtExceptionHandler(e->{
// handle error.
});
```
## Network transfer in Fetch
The network transfer in fetch style
### Get text content.
```js
import cn.brainpoint.febs;
Febs.Net.fetch("https://xxxx")
// get text content.
.then(res->{ return res.text(); })
// print content.
.then(res->{
System.out.print(res);
})
// If exception cause.
.fail((e)->{
System.err.print(e.getMessage());
})
.execute();
```
### Get binary content.
```js
import cn.brainpoint.febs;
Febs.Net.fetch("https://xxxx")
// get blob content.
.then(res->{ return res.blob(); })
// print content.
.then((res)->{
BufferedReader in = (BufferedReader)res;
char buf[] = new char[1024];
while (in.read(buf, 0, buf.length) != -1) {
System.out.printf("%s", Arrays.toString(buf));
Arrays.fill(buf, '\0');
}
// important to call close().
in.close();
})
// If exception cause.
.fail((e)->{
System.err.print(e.getMessage());
})
.execute();
```
> IMPORTANT: close BufferedReader after read blob.
### Get response headers.
```js
import cn.brainpoint.febs;
Febs.Net.fetch("https://xxxx")
// get response status code.
.then(res->{
// code.
System.out.print(res.statusCode);
// message.
System.out.print(res.statusMsg);
return res;
})
// get response headers.
.then(res->{
Set keySet = res.headers.keySet();
Iterator it1 = keySet.iterator();
while(it1.hasNext()){
String Key = it1.next();
System.out.print("header: " + Key);
List values = res.headers.get(Key);
System.out.print(values);
}
})
// If exception cause.
.fail((e)->{
System.err.print(e.getMessage());
})
.execute();
```
### Set request parameter
```js
import cn.brainpoint.febs;
Febs.Net.fetch(new Requset(
url,
body,
method,
headers,
timeout,
))
// get blob content.
.then(res->{ return res.blob(); })
.execute();
```
### SSL trust manager
```js
import cn.brainpoint.febs;
/**
* set the trust manager.
* The default trust manager is trust all site.
*
* @param trustManger the trust manager object.
*/
Febs.Net.setDefaultTrustManger(X509TrustManager trustManager);
```
## Utilities
### sleep
Use `sleep` API to schedule tasks.
```js
import cn.brainpoint.febs;
Febs.Utils.sleep(1000)
.then(()->{
System.out.print("after 1000ms.");
})
.execute();
Febs.Utils.sleep(1000)
.then(res->{
System.out.print("after 1000ms.");
return Febs.Utils.sleep(2000);
})
.then(res->{
System.out.print("after 2000ms.");
})
.execute();
```