[[TOC(heading=OpenAC3, sectionindex, compact, depth=2, allactive, Documentatie/Ontwikkelaar/OpenAC3/)]] [[TOC(heading=Documentatie, sectionindex, compact, depth=1, allactive, Documentatie/)]] = OpenAC3 = Dit zijn de ontwikkelaarsnotes voor OpenAC 3 Server ontwikkeling (.Net Core server applicatie). Dit kan uitgroeien tot een volledige set pagina's zoals we dat ook voor de Python ontwikkelomgeving voor OpenAC 2 Desktop hebben. De [ServerReleases releases van de OpenAC 3 Server] zijn apart te downloaden, met een aparte release-pagina voor elke build (die er op dit moment, april 2017, heel vaak zijn). == Account == Maak op visualstudio.com een account aan. Maak vooral een ssh key aan en gebruik die als je [https://www.visualstudio.com/en-us/docs/git/command-prompt git vanaf de command-line] wilt gebruiken. Hiervoor moet je ook de key [https://www.visualstudio.com/docs/git/use-ssh-keys-to-authenticate instellen voor git]. == Command-Line Tools == Het is (goed) mogelijk om OpenAC 3 Server ontwikkeling te doen zonder Visual Studio. Het is ook aanbevolen / nodig om de command-line tools te hebben voor het bouwen van MSI Installer packages van OpenAC 3 Server. De volgende tools moeten worden geinstalleerd om een volledige command-line omgeving te krijgen: === Git Command-Line === Het is mogelijk om git command-line tools te installeren vanuit Visual Studio. Om het handmatig te doen, [https://git-scm.com/download download] de installer. Daarna heb je een desktop-icon voor ''Git Bash''. Hoewel de Visual Studio documentatie aanraadt die te verwijderen, is het toch handig voor command-line gebruik. === WiX Toolset === Ga naar de [http://wixtoolset.org/releases/ WiX releases] pagina en kies de meest recente versie. De downloads komen van ''codeplex.com'' ; op moment van schrijven is WiX 3.10 courant. De installer ziet er heel blits uit, en is snel klaar. === dotNet Core SDK === Download van [http://www.microsoft.com/net/core#windows Microsoft] de .NET SDK for Windows. Dat is een van de linkjes bij punt 1; neem niet de Visual Studio tools tenzij je (ook) Visual Studio gaat gebruiken. Om de installatie helemaal te voltooien zal je wat werk moeten doen, omdat de installer voor preview 2-003131 een fout bevat en niet alle tools kan downloaden. - Voer eerst een keer de installer uit en wacht tot het faalt. Sluit de installer. Merk op dat de default link verwijst naar de x64 versie van de installer; als je een 32-bit systeem hebt, dan moet je wat in de download link aanpassen. - Download de [http://www.microsoft.com/en-us/download/details.aspx?id=48145 redistributable runtime] voor de SDK, van Microsoft en installeer die. Merk op dat als je een verkeerd platform (x64 vs x86) kiest, en ihb. 64-bit probeert te installeren op een 32-bit systeem, dat de foutmelding is "kan alleen worden geinstallerd op Windows XP of later" in plaats van iets zinvols. - Draai je (juist bit-grootte) installer nog een keer. === Visual Studio Code === ('''aanbevolen''') Als lightweight editor is [https://code.visualstudio.com/ Visual Studio Code] aan te bevelen. === MinGW === ('''aanbevolen''') Om nog wat command-line tools toe te voegen aan je ontwikkelomgeving, download de[https://sourceforge.net/projects/mingw/files/Install MinGW installer], en voer die uit. Kies vervolgens uit de MSYS groep, ''msys-make (bin)'', en installeer dat. === Bash Instellingen === Na deze installatie-stappen zijn de dotnet en git tools direct beschikbaar in de Git Bash shell. Make en de WiX tools echter niet. Daarom moeten de Bash instellingen worden aangepast. Start de Git Bash shell, en voeg aan `.bashrc` (waarschijnlijk bestaat dat bestand nog niet) de volgende regels toe. Als je WiX hebt geinstalleerd (dit neemt aan dat het versie 3.10 is): {{{ PATH="$PATH:/c/Program Files/WiX Toolset v3.10/bin/" }}} Als je MinGW hebt geinstalleerd: {{{ PATH="$PATH:/c/MinGW/msys/1.0/bin" }}} == Sources == Aangenomen dat je: - een ssh-key hebt gemaakt, - die ssh-key aan je Visual Studio account hebt toegevoegd, - een configuratie als de volgende hebt toegevoegd aan `~/.ssh/config` om de toegang te vereenvoudigen: {{{ Host fenac.visualstudio.com User fenac IdentityFile ~/.ssh/id_visualstudio }}} Dan kan je de OpenAC 3 Server repository als volgt klonen (de repo is onderdeel van het project OpenACWeb): {{{ git clone ssh://fenac.visualstudio.com/OpenACWeb/_git/OpenACWebCore }}} Velvolgens heb je een directory `OpenACWebCore`. Als je daar in gaat, kan je met `make` de applicatie bouwen. De nodige assemblies worden opgehaald, en de applicatie wordt gecompileerd. Dit kan de eerste keer aardig wat tijd kosten, vanwege alle assemblies die worden opgehaald. Daarna gaat het een stuk sneller. Als je make niet hebt, dan is `cd OpenACWeb ; dotnet build` ook goed. Als het proces voltooid is, dan heb je in de subdirectory `OpenACWeb/bin/Debug/netcoreapp1.0/win7-x86/` een `OpenACWeb.exe`(plus wat andere bestanden) die je uit kunt voeren. Dat is de stand-alone executable van OpenAC 3 Server (plus support-bestanden, die wel nodig zijn). == Packaging == Het handigst kan je packages bouwen op een systeem met make geinstalleerd; de commando's die worden uitgevoerd zijn vervelend lang. Pas de Makefile aan; bovenaan staat een lijst van `TARGET_PLATFORM` definities. Haal het commentaar-teken weg bij het platform dat je wilt. {{{ nmake setup build new-package }}} Met ''setup'' wordt de runtime opgehaald; dat hoeft maar een keer voor een gegeven target platform. Met ''build'' wordt de software gecompileert; dat is optioneel omdat ''new-package'' automatisch de software compileert als dat nodig is. Merk op dat ''new-package'' alle packaging-artefacten weggooit voordat het opnieuw begint -- dus kopieer een MSI die je hebt gemaakt naar ergens anders voordat je voor een ander platform ook new-package gaat doen. == Message Queue == Er zijn drie test-scripts voor de Message Queue (Agenda-server). Dat zijn: - `mq_server` doet een gewone MQ server na, in python. Dit kan je ook opvatten als reference implementatie, in ieder geval tot de eerste OpeNAC 3 server release. - `mq_client` geeft een command-line Python REPL met een paar speciale commando's waarmee berichten naar de MQ server te sturen zijn. In het bijzonder zijn `ping` en `cl` (voor `clientlist`) handig om te zien wie er verbonden zijn. - `test_mq` kan 1 of meer clients aanmaken en tegelijk binnenkomende berichten afdrukken of berichten spammen naar de server. Gebruik bijvoorbeeld {{{ test_mq -n 1 -t 0 }}} om een (`-n 1`) client aan te maken die eindeloos wacht (`-t 0`) op binnenkomende berichten. Maak dan in een andere command-prompt {{{ test_mq -n 10 -s }}} om tien clients aan te maken die spammen. Maak in een paar veschillende terminals 10 spammers aan om de MQ server zwaar(der) te belasten. Het heeft niet zoveel zin om meer dan `-n 10` op te geven.