Nowy typ dla Channel.state

magx2
Posty: 348
Rejestracja: śr maja 17, 2017 1:27 pm
Kontakt:

W tej chwili Channel.state nie ma żadnego typu przez co generatory kodu nie działają. Proponuję dodać nowy typ ChannelState który będzie miał wszystkie możliwe pola, które da się przesłać.

W swaggerze mogło by to wyglądać tak:

Kod: Zaznacz cały

ChannelState:
	properties:
		hi:
			type: boolean
		partialHi:
			type: boolean
		temperature:
			type: integer
		humidity:
			type: integer
		isCalibrating:
			type: boolean
		shut:
			type: integer
		on:
			type: boolean
		brightness:
			type: integer
			min: 0
			max: 100
		colorBrightness:
			type: integer
			min: 0
			max: 100
		depth:
			type integer
		distance:
			type: integer
Przykładowa implementacja w javie: https://github.com/magx2/jSuplaApi/blob ... State.java
Java 4 Life :twisted:

API Java
GUI
Server Mock

Awatar użytkownika
fracz
Posty: 2256
Rejestracja: pt paź 28, 2016 10:56 pm
Lokalizacja: Kraków

Takie obiekty będą niepoprawne w sensie programowania obiektowego... Bo zawsze będą miały tylko część pól z sensowną wartością.

Ale rzeczywiście taki typ pomógłby w odczycie wartości, dodam.
magx2
Posty: 348
Rejestracja: śr maja 17, 2017 1:27 pm
Kontakt:

Póki co to nie ma niczego więc lepiej dodać żeby było cokolwiek.

Co do czystych praktyk programowania obiektowego w kilku miejscach i tak są one już naruszone, np. param1/2/3 mają różne znaczenia zależnie od kontekstu (typu channelu). Rozwiązaniem tego problemu (i problemu z ChannelState) byłoby wprowadzenie abstrakcyjnej klasy Channel i dziedziczących po niej klas dla konkretnej funkcji, tj. LedChannel, GateChannel, SwitchChannel, ect. Jak to zrobić w swaggerze znajdziesz tutaj: https://swagger.io/docs/specification/d ... ymorphism/

Oczywiście to rozwiązanie, które zaproponowałem wymaga dużych zmian w swaggerze (zerwanie kompatybilności ) i na backendzie dlatego proszę tylko o dodanie ChannelState ;)
Java 4 Life :twisted:

API Java
GUI
Server Mock

Awatar użytkownika
pzygmunt
Posty: 18277
Rejestracja: wt sty 19, 2016 9:26 am
Lokalizacja: Paczków
Kontakt:

Bierzesz pod uwagę, że Supla składa się również z elementów, które nie są pisane obiektowo ?
Stąd np Param1 który ma wiele znaczeń. Gdyby supla-server był napisany w Javie czy w innym wysokopoziomowym języku to wydajność spadłaby na tyle, że utrzymywanie serwerów bezpłatnie byłoby niemożliwe na tym etapie projektu.
magx2
Posty: 348
Rejestracja: śr maja 17, 2017 1:27 pm
Kontakt:

W javie można bezproblemowo pisać programy które będą obsługiwać tysiące socketów w czasie rzeczywistym (są do tego gotowe biblioteki takie jak Netty czy Java NIO) ale nie o tym. Z tego co widzę to Supla Cloud jest napisany w PHP z corem w C/C++ (do komunikacji). Czy nie ma warstwy abstrakcji tuż przed REStowym endpointem, na której da się dokonać takiej konwersji?
Java 4 Life :twisted:

API Java
GUI
Server Mock

Awatar użytkownika
pzygmunt
Posty: 18277
Rejestracja: wt sty 19, 2016 9:26 am
Lokalizacja: Paczków
Kontakt:

Ad 1. Tu nie chodzi o to czy można... w najmniej wydajnym języku napiszesz wielosocket-owy serwer... kwestia kosztów.
I tu w wysokopoziomowych językach koszt wytworzenia jest mniejszy, ale już koszt CPU jest dużo wyższy.

Ad 2. Jest taka warstwa ale nie możemy też zbyt drastycznie ewoluować z uwagi na kompatybilność wsteczną. Weź też pod uwagę nasze zasoby i historię projektu. Dziś gdy projekt jest w jakimś miejscu naturalnie nasuwają się spostrzeżenia mówiące, że to i owo (w rzeczywistości bardzo dużo;) ) należałoby inaczej zaprojektować. Twoje spostrzeżenia są również bardzo trafne i słuszne... niemniej jednak na wiele z tych zmian nie możemy sobie od razu pozwolić. :) Tak czy inaczej wszelkie uwagi i sugestie są mile widziane.
magx2
Posty: 348
Rejestracja: śr maja 17, 2017 1:27 pm
Kontakt:

Jakiś update dotyczący tego?
Java 4 Life :twisted:

API Java
GUI
Server Mock

magx2
Posty: 348
Rejestracja: śr maja 17, 2017 1:27 pm
Kontakt:

Cos bedziemy z tym robic - przydalo by sie chociaz wpraowadzic tan pomysl z 1szego postu
Java 4 Life :twisted:

API Java
GUI
Server Mock

ODPOWIEDZ

Wróć do „CLOUD”