Hallo Zusammen,
ich experimentiere zurzeit etwas mit der OSCARLib herum. Allerdings hab ich da ein kleines Problem. Evtl. ist das auch keine Sache die speziell die OSCARLib betrifft daher bitte ich es zu Entschuldigen wenn das hier das falsche Forum sein sollte.
Also ich fang mal an:
Wenn ich das richtig verstanden habe muss man bei der Lib für alles ein Handler erstellen.
Das sieht jetzt momentan bei mir so aus:
Jetzt weiß ich aber nicht wie prüfen kann ob etwas schon "fertig" ist da das ja alles im einem extra Thread läuft.
Bsp.:
Erstes kann daraus schon mal nicht auf die GUI zugreifen, daher schreibe ich es in ein List Of (String). Aber ich weiß jetzt ja nicht wenn das abgeschlossen ist.
Klar könnte ich jetzt hier mit while schleifen arbeiten, aber da muss es doch eine schönere Lösung geben. (?)
Vollständigkeit halber hier der komplette Code
(Hier habs ich mal mit while schleifen versucht. Tut auch aber ist halt keine saubere Lösung finde ich) :
Spoiler anzeigen
Ich weiß das ist nicht so wirklich gut erklärt, aber ich hoffe ihr versteht was mein Problem ist. Vielen Dank.
Gruß Seji
ich experimentiere zurzeit etwas mit der OSCARLib herum. Allerdings hab ich da ein kleines Problem. Evtl. ist das auch keine Sache die speziell die OSCARLib betrifft daher bitte ich es zu Entschuldigen wenn das hier das falsche Forum sein sollte.
Also ich fang mal an:
Wenn ich das richtig verstanden habe muss man bei der Lib für alles ein Handler erstellen.
Das sieht jetzt momentan bei mir so aus:
VB.NET-Quellcode
- 'Add Handler
- AddHandler _session.LoginFailed, AddressOf _login_Failed
- AddHandler _session.LoginCompleted, AddressOf _login_Completed
- AddHandler _session.ContactListFinished, AddressOf _login_ContactListFinished
- AddHandler _session.StatusUpdate, AddressOf _session_StatusUpdate
- AddHandler _session.WarningMessage, AddressOf _session_WarningMessage
- AddHandler _session.AuthorizationRequestReceived, AddressOf _auth_RequestReceived
- AddHandler _session.AuthorizationResponseReceived, AddressOf _auth_ResponseReceived
- AddHandler _session.FutureAuthorizationReceived, AddressOf _auth_FutureReceived
- AddHandler _session.Statuses.UserInfoReceived, AddressOf _status_UserInfoReceived
- AddHandler _session.Statuses.UserStatusReceived, AddressOf _status_UserStatusReceived
- AddHandler _session.Statuses.UserOffline, AddressOf _status_UserOffline
Jetzt weiß ich aber nicht wie prüfen kann ob etwas schon "fertig" ist da das ja alles im einem extra Thread läuft.
Bsp.:
Erstes kann daraus schon mal nicht auf die GUI zugreifen, daher schreibe ich es in ein List Of (String). Aber ich weiß jetzt ja nicht wenn das abgeschlossen ist.
Klar könnte ich jetzt hier mit while schleifen arbeiten, aber da muss es doch eine schönere Lösung geben. (?)
Vollständigkeit halber hier der komplette Code
(Hier habs ich mal mit while schleifen versucht. Tut auch aber ist halt keine saubere Lösung finde ich) :
VB.NET-Quellcode
- Public Class Form1
- Inherits QRibbonForm
- Dim _session As New Session(My.Settings.UIN, My.Settings.Password)
- Dim _users As New List(Of String)
- Dim _complete As Boolean = False
- Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
- If _session.LoggedIn = False Then
- _session.Logoff()
- End If
- End Sub
- Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
- 'Add Handler
- AddHandler _session.LoginFailed, AddressOf _login_Failed
- AddHandler _session.LoginCompleted, AddressOf _login_Completed
- AddHandler _session.ContactListFinished, AddressOf _login_ContactListFinished
- AddHandler _session.StatusUpdate, AddressOf _session_StatusUpdate
- AddHandler _session.WarningMessage, AddressOf _session_WarningMessage
- AddHandler _session.AuthorizationRequestReceived, AddressOf _auth_RequestReceived
- AddHandler _session.AuthorizationResponseReceived, AddressOf _auth_ResponseReceived
- AddHandler _session.FutureAuthorizationReceived, AddressOf _auth_FutureReceived
- AddHandler _session.Statuses.UserInfoReceived, AddressOf _status_UserInfoReceived
- AddHandler _session.Statuses.UserStatusReceived, AddressOf _status_UserStatusReceived
- AddHandler _session.Statuses.UserOffline, AddressOf _status_UserOffline
- _session.SetDefaultIdentification()
- _session.Logon(My.Settings.login_server, My.Settings.login_port)
- While _session.LoggedIn = False
- End While
- Label_status.Text = "Online"
- For Each _buddy As SSIBuddy In _session.SSI.GetSSIBuddyList
- _session.Statuses.RequestBasicUserInfo(_buddy.Name, BasicUserInfoRequest.OnlineInfo)
- Next
- While _complete = False
- End While
- For Each _user In _users
- lv_users.Items.Add(_user)
- Next
- End Sub
- Private Sub _login_Failed(ByVal sess As Session, ByVal errorcode As LoginErrorCode)
- MessageBox.Show("Failed to Login: " & errorcode.ToString)
- End Sub
- Private Sub _login_Completed(ByVal sess As Session)
- MessageBox.Show("Login Complete")
- End Sub
- Private Sub _login_ContactListFinished(ByVal sess As Session, ByVal lastModificationDate As Date)
- _session.ActivateBuddyList()
- End Sub
- Private Sub _session_StatusUpdate(ByVal sess As Session, ByVal message As String)
- Throw New NotImplementedException
- End Sub
- Private Sub _auth_RequestReceived(ByVal sess As Session, ByVal screenname As String, ByVal reason As String)
- Throw New NotImplementedException
- End Sub
- Private Sub _session_WarningMessage(ByVal sess As Session, ByVal errorcode As ServerErrorCode)
- Throw New NotImplementedException
- End Sub
- Private Sub _auth_ResponseReceived(ByVal sess As Session, ByVal screenname As String, ByVal authorizationGranted As Boolean, ByVal reason As String)
- Throw New NotImplementedException
- End Sub
- Private Sub _auth_FutureReceived(ByVal sess As Session, ByVal screenname As String, ByVal reason As String)
- Throw New NotImplementedException
- End Sub
- Private Sub _status_UserInfoReceived(ByVal sender As Object, ByVal info As UserInfoResponse)
- Throw New NotImplementedException
- End Sub
- Private Sub _status_UserStatusReceived(ByVal sender As Object, ByVal userinfo As UserInfo)
- If userinfo.ICQUserStatus = ICQStatus.Online Then
- _users.Add(userinfo.ScreenName & " | " & "Online")
- Else
- _users.Add(userinfo.ScreenName & " | " & "Offline")
- End If
- _complete = True
- End Sub
- Private Sub _status_UserOffline(ByVal sender As Object, ByVal userinfo As UserInfo)
- Throw New NotImplementedException
- End Sub
- End Class
Ich weiß das ist nicht so wirklich gut erklärt, aber ich hoffe ihr versteht was mein Problem ist. Vielen Dank.
Gruß Seji