###### tags: `WebService`
# Résumé examEN!!!!!!!!!
# HTML & javascript
## Ajax
### ex1
#### connection avec ajax a siemens et envoie la valeur sur changement au plc
```
<!DOCTYPE html>
<html lang="fr">
<meta charset="UTF-8">
<head>
<title>siemens code test</title>
</head>
<script src="https://code.jquery.com/jquery-3.5.0.min.js"></script>
<script>
function send2PLC(variable, value) {
//prepare Siemens AWP-Var in "" with the value
var dataString = '"' + variable + '"=' + value;
$.ajax({
type: "POST",
url: "",
data: dataString
});
}
</script>
<body>
<!-- AWP_In_Variable Name='"qb_Level"' -->
<input type="text" onchange="send2PLC('qw_Level',value)">
</body>
</html>
```
### ex2
#### Ajax Array montre les valeurs d'un array du plc
```
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script>
function loadDoc() {
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
var arr = xhttp.responseText.split(",");
document.getElementById("info").innerHTML = arr[0];
document.getElementById("i11.0").innerHTML = arr[1];
}
};
xhttp.open("GET", "siemens.html", true);
xhttp.send();
}
var active = setInterval("loadDoc()", 500);
</script>
</head>
<body>
<div id="demo">
<h1>Donné TIA</h1>
<button type="button" onclick="loadDoc()">Change Content</button>
</div>
IW60
<div id="info">
ceci est remplacé par Iw22
</div>
I11.0
<div id="i11.0">
ceci est remplacé par Iw26
</div>
</body>
</html>
```
#### dans le siemens.html
(:=%IW60: et :=%I11.0: vont étre remplacé par les valeurs du plc)
```
{"Level": ":=%IW60:", "BtnStart":" :=%I11.0:"}
```
## ex BULP
Utiliser un API. dans ce cas le api (webservice) de bulp.
```
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="referrer" content="no-referrer">
<title>Document</title>
<script>
var xhttp = new XMLHttpRequest();
function posttoggle() {
xhttp.open("POST", 'http://10.100.129.186/api/v1/device/6001942C43B6', true);
xhttp.onreadystatechange = callback;
xhttp.send("action=toggle");
}
function poston() {
xhttp.open("POST", 'http://10.100.129.186/api/v1/device/6001942C43B6', true);
xhttp.onreadystatechange = callback;
xhttp.send("action=on");
};
function postof() {
xhttp.open("POST", 'http://10.100.129.186/api/v1/device/6001942C43B6', true);
xhttp.onreadystatechange = callback;
xhttp.send("action=off");
};
function postvert() {
xhttp.open("POST", 'http://10.100.129.186/api/v1/device/6001942C43B6', true);
xhttp.onreadystatechange = callback;
xhttp.send("color=0000FF00");
};
function postrouge() {
xhttp.open("POST", 'http://10.100.129.186/api/v1/device/6001942C43B6', true);
xhttp.onreadystatechange = callback;
xhttp.send("color=00FF0000");
};
function postblanc() {
xhttp.open("POST", 'http://10.100.129.186/api/v1/device/6001942C43B6', true);
xhttp.onreadystatechange = callback;
xhttp.send("color=FF000000");
};
function callback() {
if (xhttp.readyState == 4) {
var info= xhttp.responseText;
document.getElementById("disp").innerHTML = info;
}
}
</script>
</head>
<body>
<button onclick="posttoggle()">toggle</button>
<button onclick="poston()">on</button>
<button onclick="postof()">off</button>
<button onclick="postvert()">vert</button>
<button onclick="postrouge()">rouge</button>
<button onclick="postblanc()">blanc</button>
<p id="disp" >
txt </p>
</div>
</body>
</html>
```
## openweatherMap
```
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script>
function loadDoc() {
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
var obj = JSON.parse(xhttp.responseText);
document.getElementById("temp").innerHTML = obj.main.temp;
document.getElementById("city").innerHTML = obj.main.city;
}
};
xhttp.open("GET", "https://api.openweathermap.org/data/2.5/weather?lat=35&lon=139&appid=b635ecb76f1ecaad90b1847c38a535e4", true);
xhttp.send();
}
var active = setInterval("loadDoc()", 5000);
</script>
</head>
<body>
<div id="demo">
<h1>The XMLHttpRequest Meteo</h1>
<button type="button" onclick="loadDoc()">Change Content</button>
</div>
temp:
<div id="temp">
</div>
city:
<div id="city">
</div>
</body>
</html>
```
# Java
## Myproprieties -> créer un fichier proprieties
```
package communication;
import java.util.*;
import java.io.*;
/**
*
* @author manuel.gerber
*/
public class MyProperties {
public static void main(String[] args)throws Exception{
Properties p=new Properties();
p.setProperty("name","Manu");
p.setProperty("email","Manu@Test.ch");
p.store(new FileWriter("info.properties"),"Javatpoint Properties Example");
}
}
```
## Bulp Java -> communiquer avec la lampe bulp(GET/POST)
```
public class RestInJava {
public static void main(String[] args) throws MalformedURLException, IOException {
URL obj = new URL("http://10.100.129.186/api/v1/device");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestProperty("User-Agent", "Mozilla/5.0");
con.setRequestProperty("Accept-Language", "en-US,en;q=0.5");
con.setRequestMethod("GET"); // optional default
String urlParameters = "";
/* con.setRequestMethod("POST");
String urlParameters = ""; // Post-Parameters
con.setDoOutput(true);
DataOutputStream wr = new DataOutputStream(con.getOutputStream());
wr.writeBytes(urlParameters);
wr.flush();
wr.close();
*/
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
System.out.println(inputLine);
}
in.close();
}
}
```
## Jackson Person
crée un fichier json dans le c:/tmp avec les valeurs donné/ crée dans le main créé une map en java et l'affiche dans la console

### Person
```
/*
* Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
* Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
*/
package Exercice.PersonJackson;
/**
*
* @author james.gremaud
*/
public class Person {
private String name;
private int age;
private boolean married;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public boolean isMarried() {
return married;
}
public void setMarried(boolean married) {
this.married = married;
}
}
```
### MainJackson
```
/*
* Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
* Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
*/
package Exercice.PersonJackson;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.File;
import java.io.IOException;
import java.util.Map;
/**
*
* @author james.gremaud
*/
public class MainJackson {
public static void main(String[] args) throws JsonProcessingException, IOException {
ObjectMapper om = new ObjectMapper();
Person person = new Person();
Person man = new Person();
man.setName("Maven");
man.setMarried(false);
man.setAge(2);
person.getAge();
person.setName("Manuel");
person.setMarried(true);
person.setAge(23);
man.getName();
//Class 2 JSON
String json = om.writeValueAsString(person);
System.out.println(json);
//Class 2 formated JSON
json = om.writerWithDefaultPrettyPrinter().writeValueAsString(person);
System.out.println(json);
//Class 3 JSON-File
om.writeValue(new File("c:/tmp/person.json"), person);
//JSON 2 Class
person = om.readValue(json, Person.class);
System.out.println(person);
//JSON 2 Java
Map<String, Object> map = om.readValue(json, Map.class);
System.out.println(map);
}
//JSON 2 map
/* json = """
"key":"value"
"test":"abcdefg"
""";
*/
}
```
## HttpRequest
va chercher le code html de la page web : www.alainrohr.ch et affiche le code dans la console
```
/*
* Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
* Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
*/
package coursData;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.Socket;
/**
*
* @author james.gremaud
*/
public class HttpRequest {
public static void main(String[] args) throws IOException {
String host = "www.alainrohr.ch";
Socket socket = new Socket(InetAddress.getByName(host), 80);
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
InputStream in = socket.getInputStream();
out.println("GET / HTTP/1.1\r\nHost:" + host + "\r\n"); //send HTTP request to web server
int len; //read and writeout the response
byte[] b = new byte[4096];
while ((len = in.read(b)) != -1) {
System.out.write(b, 0, len);
}
in.close(); //end program
out.close();
socket.close();
}
}
```
## Server.java ( code du prof mais fonctionne pas sur l'ordi de james):
```
package webcomRequest;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.List;
// Read the full article https://dev.to/mateuszjarzyna/build-your-own-http-server-in-java-in-less-than-one-hour-only-get-method-2k02
public class MyServer {
public static void main( String[] args ) throws Exception {
try (ServerSocket serverSocket = new ServerSocket(8080)) {
while (true) {
try (Socket client = serverSocket.accept()) {
handleClient(client);
}
}
}
}
private static void handleClient(Socket client) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(client.getInputStream()));
StringBuilder requestBuilder = new StringBuilder();
String line;
while (!(line = br.readLine()).isBlank()) {
requestBuilder.append(line + "\r\n");
}
String request = requestBuilder.toString();
String[] requestsLines = request.split("\r\n");
String[] requestLine = requestsLines[0].split(" ");
String method = requestLine[0];
String path = requestLine[1];
String version = requestLine[2];
String host = requestsLines[1].split(" ")[1];
List<String> headers = new ArrayList<>();
for (int h = 2; h < requestsLines.length; h++) {
String header = requestsLines[h];
headers.add(header);
}
String accessLog = String.format("Client %s, method %s, path %s, version %s, host %s, headers %s",
client.toString(), method, path, version, host, headers.toString());
System.out.println(accessLog);
Path filePath = getFilePath(path);
if (Files.exists(filePath)) {
// file exist
String contentType = guessContentType(filePath);
sendResponse(client, "200 OK", contentType, Files.readAllBytes(filePath));
} else {
// 404
byte[] notFoundContent = "<h1> not found </h1>".getBytes();
sendResponse(client, "404 Not Found", "text/html", notFoundContent);
}
}
private static void sendResponse(Socket client, String status, String contentType, byte[] content) throws IOException {
OutputStream clientOutput = client.getOutputStream();
clientOutput.write(("HTTP/1.1 \r\n" + status).getBytes());
clientOutput.write(("ContentType: " + contentType + "\r\n").getBytes());
clientOutput.write("\r\n".getBytes());
clientOutput.write(content);
clientOutput.write("\r\n\r\n".getBytes());
clientOutput.flush();
client.close();
}
private static Path getFilePath(String path) {
if ("/".equals(path)) {
path = "/index.html";
}
return Paths.get("/tmp/www", path);
}
private static String guessContentType(Path filePath) throws IOException {
return Files.probeContentType(filePath);
}
}
```
## TCP Server
```
/*
* Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
* Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
*/
package coursData;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Arrays;
/**
*
* @author james.gremaud
*/
public class TCPServer {
public static void main(String[] args) throws IOException {
ServerSocket server = new ServerSocket(2222); // listening on port
Socket client = server.accept(); // blocked until connection
InputStream input = client.getInputStream(); // input channel
byte buf[] = new byte[128]; // prepare receive buffer
int len = 0;
while (true) // servers run forever
{
len = input.read(buf); // read from stream and count bytes
byte[] data = Arrays.copyOf(buf, len); // cut relevant bytes
String output = Arrays.toString(data); // prepare for nice output
System.out.println(output); // output
}
}
}
```
## UDP Socket Server
```
/*
* Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
* Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
*/
package coursData;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
/**
*
* @author james.gremaud
*/
public class UDPSocketServer {
public static void main(String[] args) throws IOException {
final int SIZE=256;
byte[] buffer = new byte[SIZE];
String data;
DatagramSocket socket = new DatagramSocket(5553);
DatagramPacket p = new DatagramPacket(buffer, SIZE);
do{
socket.receive(p);
data = new String(p.getData(),0,p.getLength());
System.out.println(data);
//data = Arrays.toString(p.getData());
//System.out.println(Arrays.toString(p.getData()));
}while (!data.equalsIgnoreCase("end"));
socket.close();
}
}
```
# Node-red
## BULP




## what is my ip



## TCP communication




## Accélération téléphone communication

## JSON


## earthquake

## server REST



function code:
```
var step, result;
if(msg.req._parsedUrl.pathname=="/add"){
step=1;
}
else if(msg.req._parsedUrl.pathname=="/sub"){
step=2;
}
else if(msg.req._parsedUrl.pathname=="/mul"){
step=3;
}
else if(msg.req._parsedUrl.pathname=="/div"){
step=4;
}
switch(step) {
case 1:
result=1*msg.payload.x+msg.payload.y*1;
break;
case 2:
result=1*msg.payload.x-msg.payload.y;
break;
case 3:
result=1*msg.payload.x*msg.payload.y;
break;
case 4:
result=1*msg.payload.x/msg.payload.y;
break;
default:
}
msg.payload=" Result :"+result+" / x :"+msg.payload.x+" / y :"+msg.payload.y + " / OP :"+ msg.req._parsedUrl.pathname ;
return msg;
```
template code:
```
<!DOCTYPE html>
<html lang=”en”>
<head>
<title>Response Named Parameters</title>
</head>
<body>
<h1>Server REST</h1>
Server node-red
<br>This is the result of operation:<br>
<div>{{payload}}</div>
</body>
</html>
```