lnostdal Skrevet 24. juni 2006 Del Skrevet 24. juni 2006 (endret) okei, jeg er lei av AJAX .. seriøst; buggete browsere ødlegger _alt_ likevel synes jeg idéen med et fjernstyrt GUI er genial og har mange fordeler - og tenkte derfor å forsøke en litt annen løsning .. etter en kjapp titt på man-siden til `dlsym' burde det være mulig å laste, kalle og lese av data og funksjoner i biblioteker 100% dynamisk @ runtime: ... // Ok, we do an indirect call to `strlen' (pretend this is collected from a socket). {vector<string> arg_types; vector<string> arg_values; arg_types.push_back("pointer"); // works as char const* arg_values.push_back("Hello World!"); cout << "strlen(\"" << arg_values.back() << "\"): " << callFun("unsigned int", getAddr("", "strlen", ""), arg_types, arg_values) << endl;} ... under kjøring skriver denne ut: strlen("Hello World!"): 12 dette er portabelt til flere platformer; jeg vet dette skal fungere under Linux og Win32 (MinGW), og jeg tror det er portabelt til de fleste platformer som GCC er portet til .. måten jeg tenkte å gjøre dette på (tilbake til dette med "AJAX") var å sette opp denne siden som en klient og kjøre kall som `gtk_button_new' o.l. over tråden (dytte fra server-side) - og på den måten få til et fjernstyrt GUI som er portabelt til alle platformer som GCC og GTK kjører på (ganske mange) edit: jeg snakker hele tiden om GUI og GTK, men dette kan altså brukes mot Win32, Linux og 100-vis av andre C-biblioteker mellom serversiden og denne klienten så tenkte jeg å ha en enkel protokoll for kommunikasjon; lasting av biblioteker, lesing av verdier og kalling av funksjoner .. og man kan dermed skrive serveren i hvilket som helst språk som har støtte for sockets (noe som vil si omtrent alle språk) "remote ffi" har visse fordeler fremfor tradisjonell FFI; da man slipper at prosessen som styrer ikke krasjer når prosessen/koden/biblioteket som blir styrt SIGSEGVer eller lignende .. det er irriterende å sitte igjen med et vraket Lisp-image når GTK borker på en eller annen pointer-feil, det slipper jeg altså her okei, vel - jeg har troen på dette, og et søk på "remote gui" eller "remote ffi" @ google tilsier at dette er noe unikt; hva synes dere? er det unikt fordi det er dumt? .. hm, eller er det noen som vil bidra med noe? her er kildekoden/"hjemmesiden": http://nostdal.org/~lars/programming/lisp/rffi/rffi.html Endret 24. august 2006 av lnostdal Lenke til kommentar
einaros Skrevet 24. juni 2006 Del Skrevet 24. juni 2006 Hadde du ikke vært better off med å bruke et eller annet RPC-bibliotek, eller Java / .NET's remoting? Lenke til kommentar
einaros Skrevet 24. juni 2006 Del Skrevet 24. juni 2006 Skal man først bruke C eller C++: http://xmlrpc-c.sourceforge.net/ http://www.gb.nrao.edu/GBT/MC/ygor/librari...C++/RPCdoc.html http://msdn.microsoft.com/msdnmag/issues/1100/RPC/ Men best av alt er det nok med Java eller .NET, og så lage nødvendige koblinger til f.eks. native C-bibliotek tilgjengelig på remote-boksen. Lenke til kommentar
lnostdal Skrevet 24. juni 2006 Forfatter Del Skrevet 24. juni 2006 (endret) (veldig fort skrevet dette; jeg må ut en tur - på .. vei ut .. døra nå .. kommer kanskje tilbake litt siden når jeg har fundert litt mer på dette) jo, kanskje .. men jeg er ikke så sugen på å måtte mekke wrappere (corba-style) og slikt på "klientsiden" (?) .. det hadde vært artig å bare kunne hatt en bitteliten ting folk kunne lastet ned, skrevet inn host, brukernavn og passord - for så å fått frem et gui/program jeg tittet litt på dette med reflection i Java, men jeg kjenner litt for lite til Java til å få noe særlig ut av det .. f.eks. vet jeg ikke åssen jeg laster inn biblioteker (`import' ser ut til å være en kompile-time -sak) .. en annen ting jeg har lurt på etter å tittet på reflection-apiet er hvordan jeg skal referere til objekter på en unik måte .. i C har man jo pekere som altid vil være unike; disse kan jeg lagre på serversiden og ha full kontroll over .. om det ikke finnes en løsning her må jeg mekke wrappere rundt alle konstruktører (tror jeg), og det ønsker jeg å unngå (edit2: eller, øh .. jeg kan jo så klart mekke en wrapper for konstruering generellt antar jeg; altså uansett type/klasse) ..jeg kjenner litt for lite til både java og .net; og det er vel der problemet sitter edit: ..og .NET er ikke portabelt -- bortsett fra Mono, som mangler en del (spesiellt på dokumentasjonsbiten) ang. xml-rpc så mangler den muligheten til å laste biblioteker og "oppdage nye funksjoner" @ runtime, men jeg kunne så klart brukt den som en protokoll for kommunikasjon .. xml-rpc er også kun request-> response; jeg ønsker full 2-veis kommunikasjon; både klient og server skal kunne ta initiativ ... så den biten av xml-rpc går ikke; men jeg kunne som sagt satt opp protokollen til å bruke samme gramatikk (ellerwhateverdetheter) som xml-rpc (dog hadde noe basert på sexps vært mer snaznt, for ikke å si mindre verbost ) Endret 26. juni 2006 av lnostdal Lenke til kommentar
einaros Skrevet 24. juni 2006 Del Skrevet 24. juni 2006 Ta en titt på XML-RPC. Om ikke annet kan du snappe opp noen tips til hva du selv vil gjøre i ditt bibliotek. Lenke til kommentar
lnostdal Skrevet 28. juni 2006 Forfatter Del Skrevet 28. juni 2006 hakket sammen en artikkel om async sockets: https://www.diskusjon.no/index.php?showtopic=597325 jeg er lei av å "oppdage" dette hver gang, så nå formaliserer jeg det i form av et bibliotek og en kjapp artikkel Lenke til kommentar
lnostdal Skrevet 3. juli 2006 Forfatter Del Skrevet 3. juli 2006 (endret) Begynner sånn delvis å fungere nå. Jeg kaller dette på server-siden, det er klienten som utfører kallene og returnerer verdiene: RFFi> (callSFun "strlen" "unsigned int" "cstring" "Hello World!") "12" nil RFFi> (callSFun "puts" "signed int" "cstring" "Hello World!") "13" nil RFFi> (getAddr "" "strlen" "") "0xb7cff270" nil edit: ..om alt går bra så har jeg et GTK-vindu oppe om noen dager.. lurer dog på dette med callbacks.. Endret 3. juli 2006 av lnostdal Lenke til kommentar
Dead_Rabbit Skrevet 4. juli 2006 Del Skrevet 4. juli 2006 Kan kanskje prøve å få til en "signals and slots"-aktig greie, fremfor callbacks? Mulig det er litt smak og behag, men jeg foretrekker ihvertfall "signals and slots" over callbacks. Lenke til kommentar
lnostdal Skrevet 4. juli 2006 Forfatter Del Skrevet 4. juli 2006 (endret) "signals and slots" _er_ jo callbacks .. heh :} edit: heh, eller "bygget på toppen av" callbacks jeg må ha en mulighet til å passe en "peker" til en funksjon (lisp-funksjon ellerwhatever) på serversiden som et argument til en `signal_connect'-ting .. pekere til funksjoner i denne sammenhengen er callbacks dette går så klart ikke, så jeg må løse det ved å bruke en felles funksjon på klientsiden for alle callbacks som på ett eller annet vis, v.h.a. et argument som blir satt under opprettelse av forbindelsen av signalet, sender en melding til serveren med det spesielle argumentet ... noe uklart forklart dette, for jeg sliter litt med hvordan jeg skal få til dette på en generell måte; tror jeg må bruke litt `va_arg' og sånnt (man 3 stdarg) Endret 24. august 2006 av lnostdal Lenke til kommentar
Dead_Rabbit Skrevet 4. juli 2006 Del Skrevet 4. juli 2006 Joda, hehe, er callbacks begge greiene, men du er sikkert enig i at det er mer behagelig enn "old fashion" callbacks Uansett, spennende å se hvordan det blir uansett hvilket "callback system" som blir benyttet, heh. Lenke til kommentar
lnostdal Skrevet 4. juli 2006 Forfatter Del Skrevet 4. juli 2006 (endret) *yawn* du skjønner ikke hva jeg mener ...... callbacks/signals/whatever er basert på funksjonspekere; og det er det jeg er ute etter .. okei, si det slik da; jeg ønsker å kunne angi pekere til funksjoner på serveren, på samme vis som jeg angir pekere til funksjoner lokalt så jeg benytter ikke et system fremfor et annet; men prøver å få til det som ligger til grunn for alle slike systemer (signal, event, callback --> function pointers) (edit2: det går vel å implementere på andre måter også; v.h.a. en wait-condition, men det er mye mindre aktuellt (og allerede mulig som koden er nå)) edit: uansett, jau - får se om dette går Endret 4. juli 2006 av lnostdal Lenke til kommentar
lnostdal Skrevet 31. juli 2006 Forfatter Del Skrevet 31. juli 2006 (endret) Okei, nå er callbacks på plass, sånn delvis. Man kan se et enkelt eksempel som bygger opp et GUI v.h.a. GTK i aksjon her: http://nostdal.org/~lars/programming/lisp/...i-callbacks.gif `createCallback' tar en funksjon som argument (edit: øh, altså den som blir kallt når event'en skjer). Endret 24. august 2006 av lnostdal Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå