[ sojic @ 13.09.2005. 18:06 ] @
Kako sledeće?

Napraviču servis koji radi nešto (osluškuje mrežu, upisuje u bazu i šalje podatke na seriski port). Ovo treba da radi čim se uključi kompjuter.

Treba mi kontrolan program, koji će da "komunicira" sa servisom, i prikazuje šta se dešava.

U slučaju da korisnik isključi program (klijentski program), servis i dalje radi i šalje podatke seriskom portu.

Znači, mene zanima kako da servis i klijent komuniciraju.
[ Srki_82 @ 13.09.2005. 18:35 ] @
Ja koristim TCP/IP protokol. Indy komponente su vrlo lake za koristenje i sto je najbolje, servis moze da bude na nekom racuaru, a ti preko neta, ko zna odakle, da podesavas taj servis
[ sojic @ 13.09.2005. 18:50 ] @
Uf, Indy nikad nisam naučio. Ja koristim FPiette komponente.

Ali zanimalo me je kako da na istom računaru, dva programa komuniciraju (bez TCP).

Ali i ovo je odličan predlog.

Hvala na ideji.
[ obucina @ 13.09.2005. 19:56 ] @
File / New / Service

Citaj help.

Za komunikacije medju procesima trazi IPC na guglu.
[ srdjandakic @ 15.09.2005. 17:45 ] @
Citat:
sojic
Znači, mene zanima kako da servis i klijent komuniciraju.


Jednostavno resenje ti je pomocu prozora (HWND) za komunikaciju:

Code:

//
// slanje strukture (poruke) event prozoru CommWindowHandle
//
var
  event: TMyEvent;
...
GlobalMemoryHandle := GlobalAlloc(GHND, SizeOf(event));
if GlobalMemoryHandle = 0 then
  raise Exception.Create('GlobalAlloc: Unable to allocate memory block');

try
  GlobalMemoryPtr := GlobalLock(GlobalMemoryHandle);
  try
    Move(event, GlobalMemoryPtr^, SizeOf(event));
  finally
    GlobalUnlock(GlobalMemoryHandle);
  end;
  PostMessage(CommWindowHandle, WM_IPC_EVENT, 0, GlobalMemoryHandle);
except
  GlobalFree(GlobalMemoryHandle);
end;

//
// obrada poruke
//
procedure TMyApp.WndProc(var Message: TMessage);
var
  GlobalMemoryHandle: HGLOBAL;
  pEvent: ^TMyEvent;
begin
  case Message.Msg of
  
    WM_IPC_EVENT:
    begin
      GlobalMemoryHandle := Message.LParam;      
      pEvent := pointer(GlobalLock(GlobalMemoryHandle));      
      try 
        // Do the event
        OnEvent(pEvent^);
      finally
        GlobalUnlock(GlobalMemoryHandle);
        GlobalFree(GlobalMemoryHandle);
      end;
    end;

  end;
end;


BTW...

API na kome radim sluzi za transport poruka preko TCP-ja izmedju dve aplikacije, koje mogu biti i na razlicitim platformama, npr. Palm <-> C#.NET, ili PocketPC <-> Delphi/Win32.

U tvom slucaju bi se u obe aplikacije (servis i eksterni program) dodao unit sa definicijom i handlovanjem poruka i kreirao MsgClient objekat koji se konektuje na standalone messaging server aplikaciju.

Trenutno postoji podrska samo za C++ / Windows / Windows CE, ali uskoro bi trebao da dobije i Delphi unite kao i podrsku za druge platforme.

API je u alpha fazi, ali radi :) Ako neko zeli da ucestvuje u testiranju, moze da downloaduje sa donjeg sajta.

http://www.fortmobile.com/products.html