also irgendwie verliere ich langsam die nerven....

mein problem beschr�nkt sich nun wirklich darauf, dass ich auf das formular keinen 
zugriff vom
server aus habe, bzw. sich der server auch aufh�ngt, wenn ich das formular am ersten 
client
aufrufe. (und zwar solange, bis ich es dort manuell schlie�e).
ich muss da wohl mit threads arbeiten, aber dann verliere ich glaube ich die kontrolle 
v�llig �ber
die fenster, die ich remote �ffne.

vieleicht brauche ich auch einen ganz neuen ansatz.

ich will einfach nur folgendes realisieren:

ein server, an dem sich clients anmelden �ber MarshalByRefObj
diese clients werden in einer hashtable verwaltet.

wenn ich am server nun einen button lockAllStations dr�cke, dann
geht der die hashtable durch und ruft f�r jeden client eine funktion auf,
die am client die methode showDialog des private-attribut des clientObjects aufruft.

hier mal ein wenig code:

Die Server-Klasse:
Imports System
Imports System.Collections
Imports Interfaces.ClientServerInterfaces

Namespace Server
    Public Class ServerObject
        Inherits MarshalByRefObject
        Implements IServer

        Private _clients As Hashtable = New Hashtable()
        Private _cThreads As Hashtable = New Hashtable()
        Private _server As ServerObject
        Private _schoolMain As Form1

        Sub New()
            Me._server = Me
        End Sub

        Public Sub _giveMainForm(ByRef schoolMain As Form) Implements 
IServer._giveMainForm
            Me._schoolMain = schoolMain
        End Sub

        Public Sub _login(ByRef client As IClient) Implements IServer._login
            Me._clients.Add(client._guid, client)
            Me._schoolMain.Info.Text = Me._schoolMain.Info.Text & " \n " & 
client._computerName & "
registriert"
        End Sub

        Public Sub _logout(ByRef client As IClient) Implements IServer._logout
            Me._clients.Remove(client._guid)
        End Sub

        Public Function _lockAllStations() As Boolean Implements 
IServer._lockAllStations
            Dim user As IClient

            For Each user In _clients.Values
                user._lockStation()
            Next
            Return True
        End Function

        Public Function _unlockAllStations() As Boolean Implements 
IServer._unlockAllStations
            Dim user As IClient
            For Each user In _clients.Values
                user._unlockStation()
            Next
            Return True
        End Function

        Public Function _lockSingleStation(ByRef client As IClient) As Boolean 
Implements
IServer._lockSingleStation
            Dim user As IClient
            user = _clients(client._guid)
            user._lockStation()
            Return True
        End Function

        Public Function _unlockSingleStation(ByRef client As IClient) As Boolean 
Implements
IServer._unlockSingleStation
            Dim user As IClient
            user = _clients(client._guid)
            user._unlockStation()
            Return True
        End Function
    End Class
End Namespace



Und die Client-Klasse:
'Referenz auf die Interface Klasse
Imports Interfaces.ClientServerInterfaces

'Referenz auf Systeminformationen um Username und Computername zu ermitteln
Imports System.Windows.Forms.SystemInformation

'Die Klasse Client muss von der Klasse MarshalByRefObject erben, um durch
'das .Net Remoting durch Netz gereicht werden zu k�nnen. Au�erdem implementiert
'sie das Interface IClient
Public Class Client
    Inherits MarshalByRefObject
    Implements IClient

    'Global unique identifier - die eindeutige ID eines erstellten Client-Objects
    Private guid As guid

    'Der Loginname des Benutzers, auf dessen Rechner das Client-Object erzeugt wurde
    Private loginName As String

    'Der Computername des Rechners, auf dem das Client-Object erzeugt wurde
    Private computerName As String

    'KANN IN DER SERVICEVERSION GEL�SCHT WERDEN!!!
    Private myParent As Form1

    'Eine Instanz der Klasse StationLockScreen - wird ben�tigt um am Client das 
    'Sperrfenster aufzurufen
    Public screen As StationLockScreen

    'Konstruktor - BYREF PARENT KANN BEIM SERVICE GEL�SCHT WERDEN
    Public Sub New(ByRef parent As Form1)
        myParent = parent
        'Der Loginname wird ermittelt
        loginName = System.Windows.Forms.SystemInformation.UserName
        'Der Computername wird ermittelt
        computerName = System.Windows.Forms.SystemInformation.ComputerName
        'Erzeugt eine neue Instanz von StationLockScreen
        screen = New StationLockScreen()
    End Sub

    Public ReadOnly Property _guid() As guid Implements IClient._guid
        Get
            Return guid
        End Get
    End Property

    Public ReadOnly Property _computerName() As String Implements IClient._computerName
        Get
            Return computerName
        End Get
    End Property

    Public ReadOnly Property _loginName() As String Implements IClient._loginName
        Get
            Return loginName
        End Get
    End Property

    Public Sub _lockStation() Implements IClient._lockStation
        screen.ShowDialog()
        screen._iShowDialog = True
        myParent.status.Text = "Lockstation called"
    End Sub

    Public Sub _unlockStation() Implements IClient._unlockStation
        screen.Close()
        myParent.status.Text = "UnLockstation called"
    End Sub

End Class




----- Original Message -----
From: Christoph Wille
To:  [EMAIL PROTECTED]
Sent: Tue, 27 Jul 2004 22:26:16 +0200
Subject: Re: [Vb.net] form.showDialog

Als Service? Na da bekommst Du dann noch die Probleme weil der auf den 
Desktop durchgreifen mu�...

Chris

At 10:14 PM 7/27/2004, you wrote:
>die clientapplikation soll so wenig performance wie m�glich verbraten, da 
>es sich da um sehr alte
>rechner handelt. mein erster ansatz war auch auf dem client eine sog. 
>watcherfunktion laufen zu
>lassen, die pr�ft, ob das formular ge�ffnet ist. aber das wurde mir dann 
>untersagt.
>das mit dem abschie�en ist auch die sache, die ich noch ausprobieren muss.
>die clientanwendung wird nachher als service unter adminrechten laufen. 
>wenn das formular dann von
>dort aus ge�ffnet wird, wei� ich nciht, ob er normalobenutzer das dann 
>abschie�en kann.
>aber selbst wenn, dann soll es ja eben diese funktion geben, die das 
>formular immer wieder aufruft
>und an der ich ja gerade jetzt h�nge. :-/
>
>----- Original Message -----
>From: Christoph Wille
>To:  [EMAIL PROTECTED]
>Sent: Tue, 27 Jul 2004 22:04:27 +0200
>Subject: Re: [Vb.net] form.showDialog
>
>�hmmmm.... ich frage mich, warum ich in der Clientapplikation nicht die
>Logik unterbringen soll.
>
>Was passiert denn wenn der User die Clientapplikation v�llig "abschie�t"
>(ie Task Manager)?
>
>Chris
>
>At 10:06 PM 7/27/2004, you wrote:
> >nichts. nur w�rde das ja auch nciht mein problem l�sen, oder?
> >
> >es ist halt so:
> >
> >das form wird auf den clients ge�ffnet. sollte nun der client aus
> >irgendeinem grund in der lage
> >sein, das form zu schlie�en, will ich eben, dass es wieder ge�ffnet wird.
> >um den client zu entlasten, hat mein auftraggeber mir gesagt, ich sollte
> >einfach vom server aus
> >alle 5 sekunden oder so, die funktion zum �ffnen des forms aufrufen (ich
> >wei�, eine ziemlich
> >d�mliche, netzwerklastige l�sung). naja - und wenn ich das so machen
> >w�rde, h�tte ich nacher
> >100erte von forms ge�ffnet. und ich wollte eben einfach in der funktion
> >abfragen - bin ich
> >ge�ffnet? wenn ja, gut, wenn nciht, mach mich auf.
> >
> >that's all.
> >
> >
> >----- Original Message -----
> >From: Christoph Wille
> >To:  [EMAIL PROTECTED]
> >Sent: Tue, 27 Jul 2004 21:53:59 +0200
> >Subject: Re: [Vb.net] form.showDialog
> >
> >Das klingt f�r mich nach der Variante das Pferd verkehrt rum aufzuz�umen...
> >
> >Normalerweise l�st man das dadurch, da� der Client auf einem Serverobjekt
> >ein Event subscribed ("�hnlich" zu Winforms, wo der Button der "Server"
> >ist). Hat der Server was zu melden, dann l�st er das Event aus - und der
> >Client reagiert dann entsprechend.
> >
> >Was spricht gegen diesen Ansatz?
> >
> >Chris
> >
> >At 09:55 PM 7/27/2004, you wrote:
> > >folgender aufbau:
> > >
> > >1 server, der eine hashtable mit client-objekten verwaltet (siehe letzte
> > mail)
> > >
> > >x clients, die sich an dem server anmelden
> > >
> > >
> > >server soll nun in der lage sein, auf den clients ein form zu �ffnen
> > >(siehe letzte mail).
> > >
> > >dieses form-objekt ist teil des client-objektes, das sich am server
> > >anmeldet und in der hashtable
> > >vom server gespeichert wird.
> > >
> > >mein problem: wenn der server die methode zum �ffnen des forms im
> > >client-objekt aufruft, will ich
> > >nicht, dass sich das formular mehrmals �ffnet, sondern eben nur einmal,
> > >bzw. wenn es schon ge�ffnet
> > >ist, sich nicht ein weiteres �ffnet.
> > >
> > >wenn ich eben screen.showDialog() zweimal hintereinander aufrufe, dann
> > >habe ich zwei screen-dialoge,
> > >  was ich nicht will.
> > >
> > >habe die form-klasse auch schon als singleton gemacht, hat aber nix
> > >gebracht. wenn ich vom server
> > >aus die funktion zum form-�ffnen zweimal aufrufe, dann �ffnen sich auch
> > >zwei dialog-fenster.
> > >
> > >
> > >hoffe, ich habe es einigerma�en beschrieben und du kannst was damit
> > >anfangen ...
> > >
> > >
> > >----- Original Message -----
> > >From: Christoph Wille
> > >To:  [EMAIL PROTECTED]
> > >Sent: Tue, 27 Jul 2004 20:18:11 +0200
> > >Subject: Re: [Vb.net] form.showDialog
> > >
> > >Remote? Ich erinnere mich irgendwie nicht das in der urspr�nglichen
> > >Beschreibung gelesen zu haben.
> > >
> > >Also bitte ein wenig Architekturinfo und vor allem welches Problem gel�st
> > >werden soll.
> > >
> > >Chris
> > >
> > >At 07:33 PM 7/27/2004, you wrote:
> > > >also. habe das jetzt mal versucht, aber es klappt leider nicht so 
> wie ich
> > > >will...
> > > >ich denke, das liegt daran, dass die eine klasse von marshalByRef
> > > >abgeleitet ist...
> > > >
> > > >ich versuche es mal zu erkl�ren:
> > > >
> > > >ich habe eine klasse client, die das marshalByRef erbt.
> > > >
> > > >diese klasse hat ein private screen As lockForm und eine funktion
> > lockScreen
> > > >
> > > >die klasse lockForm hat ein Attribut iAmShown As Boolean
> > > >
> > > >jetzt passiert folgendes:
> > > >
> > > >der server geht alle client-klassen durch, die er in seiner 
> hashtable hat
> > > >und ruft dort die
> > > >funktion lockScreen der client-objekte auf.
> > > >
> > > >was passiert in der funktion:
> > > >
> > > >if(NOT screen.iAmShown)Then
> > > >     screen.ShowDialog()
> > > >End If
> > > >
> > > >
> > > >so... und in meiner lockScreen-Klasse habe ich dann eine Funktion 
> onClose,
> > > >in der der wert von
> > > >iAmShown auf false gesetzt wird.
> > > >
> > > >allerdings setzt er den wert irgendwie nicht auf false, obwohl die
> > > >funktion beim schlie�en
> > > >ausgef�hrt wird. aber wenn ich die funktion lockScreen nochmal aufrufe,
> > > >kommt nix mehr, da der wert
> > > >von iAmShown immer noch auf true ist....
> > > >
> > > >keine ahnung, was ich da verpeile ... aber ich sch�tze, es hat was 
> mit der
> > > >remote geschichte zu tun.
> > > >
> > > >----- Original Message -----
> > > >From: [EMAIL PROTECTED]
> > > >To:  <[EMAIL PROTECTED]>
> > > >Sent: Wed, 28 Jul 2004 00:57:17 +1000
> > > >Subject: Re: [Vb.net] form.showDialog
> > > >
> > > >richtig....
> > > >
> > > >dann werde ich das mit der variablen l�sen. :-)
> > > >
> > > >dank dir.
> > > >
> > > >
> > > >----- Original Message -----
> > > >From: Christoph Wille
> > > >To:  [EMAIL PROTECTED]
> > > >Sent: Tue, 27 Jul 2004 16:49:38 +0200
> > > >Subject: Re: [Vb.net] form.showDialog
> > > >
> > > >Du hast ja bereits die eine Form-Variable; Dir geht es um den
> > > >"�ffnungszustand" des Forms.
> > > >
> > > >Chris
> > > >
> > > >At 04:50 PM 7/27/2004, you wrote:
> > > > >ah. ok ... klingt simple.
> > > > >
> > > > >und was h�lst du von dem ansatz hier?
> > > > >http://www.ondotnet.com/lpt/a/2715
> > > > >
> > > > >ist halt etwas aufw�ndiger ...
> > > > >----- Original Message -----
> > > > >From: Christoph Wille
> > > > >To:  [EMAIL PROTECTED]
> > > > >Sent: Tue, 27 Jul 2004 16:41:25 +0200
> > > > >Subject: Re: [Vb.net] form.showDialog
> > > > >
> > > > >Das Singleton als boolsche globale Variable schwebt mir hier vor - 
> beim
> > > > >Aufruf von ShowDialog wird sie gesetzt, der Form macht sie wieder auf
> > > false
> > > > >wenn er sich schlie�t (nicht in Dispose, aber in OnOk bzw Cancel 
> Events)
> > > > >
> > > > >Crhis
> > > > >
> > > > >At 04:36 PM 7/27/2004, you wrote:
> > > > > >stimmt auch wieder... und wie mache ich das? lasse ich dann die
> > > > > >form-klasse nicht nur von form
> > > > > >erben sondern auch von singleton?
> > > > > >dann muss ich aber doch bestimmt eine exception abfangen ...
> > > > > >bzw. wenn ich eine singleton klasse form habe, hei�t das dann
> > auch, dass
> > > > > >ihr dialog nur einmalig
> > > > > >angezeigt wird???
> > > > > >vielleicht verpeile ich das auch gerade total...
> > > > > >
> > > > > >----- Original Message -----
> > > > > >From: Christoph Wille
> > > > > >To:  [EMAIL PROTECTED]
> > > > > >Sent: Tue, 27 Jul 2004 16:27:50 +0200
> > > > > >Subject: Re: [Vb.net] form.showDialog
> > > > > >
> > > > > >Ein Singleton w�rde sich hier anbieten.
> > > > > >
> > > > > >Chris
> > > > > >
> > > > > >At 04:28 PM 7/27/2004, you wrote:
> > > > > > >an die variable habe ich auch schon gedacht ... nur, wie setze
> > ich die
> > > > > > >variable auf "nicht offen",
> > > > > > >wenn das dialogfeld nicht von der aufrufenden klasse geschlossen
> > wird?
> > > > > > >dann m��te ich eine referenz
> > > > > > >der klasse mit an das formular �bergeben und dann wo die
> > variable auf
> > > > > > >"nicht offen" setzen? im
> > > > > > >dispose?
> > > > > > >
> > > > > > >----- Original Message -----
> > > > > > >From: Christoph Wille
> > > > > > >To:  [EMAIL PROTECTED]
> > > > > > >Sent: Tue, 27 Jul 2004 16:18:49 +0200
> > > > > > >Subject: Re: [Vb.net] form.showDialog
> > > > > > >
> > > > > > ><ms-help://MS.NETFrameworkSDKv1.1/cpref/html/frlrfsystemwindowsfo
> > rmsf
> > > > ormc
> > > > > > lassshowdialogtopic1.htm>
> > > > > > >
> > > > > > >Dazu fallen mir folgende Themen ein: (a) eine weitere private
> > Variable
> > > > > > >mitf�hren die anzeigt ob er Modal offen ist oder nicht, (b) wie es
> > > > in der
> > > > > > >Doku steht, eisenhart nochmal ShowDialog aufrufen und die 
> Exception
> > > > still,
> > > > > > >heimlich und leise deponieren.
> > > > > > >
> > > > > > >Chris
> > > > > > >
> > > > > > >At 04:20 PM 7/27/2004, you wrote:
> > > > > > > >vom aufrufer aus.
> > > > > > > >
> > > > > > > >ich habe eine klasse, die ein form als attribut hat.
> > > > > > > >
> > > > > > > >in einer funktion will ich nun abfragen, ob bereits die
> > showDialog()
> > > > > > > >aufgerufen wurde und wenn
> > > > > > > >nicht, sie dann aufrufen.
> > > > > > > >
> > > > > > > >bzw. - was ist, wenn das fenster vom anwender geschlossen
> > wurde? ich
> > > > > will
> > > > > > > >eben, dass es dann
> > > > > > > >automatisch wieder ge�ffnet wird... vielleicht gibt es dann ja
> > auch
> > > > > andere
> > > > > > > >m�glichkeiten.
> > > > > > > >
> > > > > > > >
> > > > > > > >
> > > > > > > >----- Original Message -----
> > > > > > > >From: Christoph Wille
> > > > > > > >To:  [EMAIL PROTECTED]
> > > > > > > >Sent: Tue, 27 Jul 2004 16:11:57 +0200
> > > > > > > >Subject: Re: [Vb.net] form.showDialog
> > > > > > > >
> > > > > > > >At 04:12 PM 7/27/2004, you wrote:
> > > > > > > > >gibt es eine m�glichkeit abzufragen, ob die funktion 
> showDialog
> > > > schon
> > > > > > > > >aufgerufen wurde???
> > > > > > > >
> > > > > > > >von wo aus? Aufrufer oder Dialog?
> > > > > > > >
> > > > > > > >Chris


_______________________________________________
Vb.net Mailingliste, Postings senden an:
[EMAIL PROTECTED]
An-/Abmeldung und Suchfunktion unter:
http://www.glengamoi.com/mailman/listinfo/vb.net

Odpovedet emailem