home *** CD-ROM | disk | FTP | other *** search
- VERSION 5.00
- Object = "{831FDD16-0C5C-11D2-A9FC-0000F8754DA1}#2.0#0"; "MSCOMCTL.OCX"
- Begin VB.Form frmClient
- BorderStyle = 3 'Fixed Dialog
- Caption = "vbMessenger Service (Not logged in)"
- ClientHeight = 4740
- ClientLeft = 150
- ClientTop = 720
- ClientWidth = 4185
- Icon = "frmClient.frx":0000
- LinkTopic = "Form1"
- MaxButton = 0 'False
- MinButton = 0 'False
- ScaleHeight = 4740
- ScaleWidth = 4185
- StartUpPosition = 3 'Windows Default
- Begin VB.Timer tmrExit
- Interval = 50
- Left = 8100
- Top = 840
- End
- Begin MSComctlLib.ImageList imlTree
- Left = 4680
- Top = 1140
- _ExtentX = 1005
- _ExtentY = 1005
- BackColor = -2147483643
- ImageWidth = 16
- ImageHeight = 16
- MaskColor = 12632256
- _Version = 393216
- BeginProperty Images {2C247F25-8591-11D1-B16A-00C0F0283628}
- NumListImages = 2
- BeginProperty ListImage1 {2C247F27-8591-11D1-B16A-00C0F0283628}
- Picture = "frmClient.frx":030A
- Key = ""
- EndProperty
- BeginProperty ListImage2 {2C247F27-8591-11D1-B16A-00C0F0283628}
- Picture = "frmClient.frx":0C34
- Key = ""
- EndProperty
- EndProperty
- End
- Begin MSComctlLib.TreeView tvwFriends
- Height = 4695
- Left = 0
- TabIndex = 0
- Top = 0
- Width = 4155
- _ExtentX = 7329
- _ExtentY = 8281
- _Version = 393217
- Indentation = 88
- LabelEdit = 1
- Style = 7
- ImageList = "imlTree"
- Appearance = 1
- End
- Begin VB.Menu mnuFile
- Caption = "&File"
- Begin VB.Menu mnuLogon
- Caption = "&Log on..."
- Shortcut = ^L
- End
- Begin VB.Menu mnuLogoff
- Caption = "Lo&g Off"
- Shortcut = ^X
- End
- Begin VB.Menu mnuSep
- Caption = "-"
- End
- Begin VB.Menu mnuExit
- Caption = "E&xit"
- End
- End
- Begin VB.Menu mnuOptions
- Caption = "&Options"
- Begin VB.Menu mnuAddFriend
- Caption = "&Add Friend..."
- Shortcut = ^A
- End
- Begin VB.Menu mnuBlock
- Caption = "&Block User..."
- Shortcut = ^B
- End
- Begin VB.Menu mnuSep1
- Caption = "-"
- End
- Begin VB.Menu mnuSendIM
- Caption = "&Send Message..."
- Shortcut = ^S
- End
- End
- Begin VB.Menu mnuPop
- Caption = "pop"
- Visible = 0 'False
- Begin VB.Menu mnuSend
- Caption = "Send Message"
- End
- End
- Attribute VB_Name = "frmClient"
- Attribute VB_GlobalNameSpace = False
- Attribute VB_Creatable = False
- Attribute VB_PredeclaredId = True
- Attribute VB_Exposed = False
- Option Explicit
- '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
- ' Copyright (C) 2000 Microsoft Corporation. All Rights Reserved.
- ' File: frmClient.frm
- '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
- Implements DirectPlay8Event
- Private Const msAppTitle As String = "vbMessenger Service"
- Private mfExit As Boolean
- Private oLog As frmLogin
- Private oLeafOnline As Node
- Private oLeafOffline As Node
- Private oMsgWnd() As frmMsgTemplate
- Private mfServerExit As Boolean
- Private Sub Form_Load()
- 'Initialize DirectPlay
- Set gofrmClient = Me
- InitDPlay
- 'Lets put an icon in the system tray
- With sysIcon
- .cbSize = LenB(sysIcon)
- .hwnd = Me.hwnd
- .uFlags = NIF_DOALL
- .uCallbackMessage = WM_MOUSEMOVE
- .hIcon = Me.Icon
- .sTip = msAppTitle & " - Not logged in." & vbNullChar
- End With
- Shell_NotifyIcon NIM_ADD, sysIcon
- SetupDefaultTree
- EnableLoggedinUI False
- EnableSendUI False
- Me.Caption = msAppTitle & " - Not logged in."
- End Sub
- Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
- Dim ShellMsg As Long
- ShellMsg = X / Screen.TwipsPerPixelX
- Select Case ShellMsg
- Case WM_LBUTTONDBLCLK
- Me.Visible = True
- Me.SetFocus
- End Select
- End Sub
- Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
- If Not mfExit Then
- Cancel = 1
- Me.Hide
- End If
- End Sub
- Private Sub Form_Unload(Cancel As Integer)
- 'Cleanup the DPlay objects
- Cleanup
- 'Remove the icon from the system tray
- Shell_NotifyIcon NIM_DELETE, sysIcon
- End Sub
- Private Sub mnuAddFriend_Click()
- 'Let's get the name of the friend we want to add
- Dim sFriend As String
- sFriend = InputBox("Please enter the name of the friend you wish to add", "Add Friend")
- If sFriend = vbNullString Then
- 'nothing was entered
- MsgBox "You must enter a friends name to add one.", vbOKOnly Or vbInformation, "Nothing entered."
- Exit Sub
- ElseIf sFriend = gsUserName Then
- 'Entered our own name
- MsgBox "Everyone wants to be friends with themselves, but in this sample, it's not allowed.", vbOKOnly Or vbInformation, "Don't enter your name."
- Exit Sub
- End If
- 'Ok, let's add the friend
- AddFriend sFriend
- End Sub
- Private Sub mnuBlock_Click()
- 'Let's get the name of the friend we want to block
- Dim sFriend As String
- sFriend = InputBox("Please enter the name of the user you wish to block", "Block user")
- If sFriend = vbNullString Then
- 'nothing was entered
- MsgBox "You must enter a user name to block one.", vbOKOnly Or vbInformation, "Nothing entered."
- Exit Sub
- ElseIf sFriend = gsUserName Then
- 'Entered our own name
- MsgBox "Why would you want to block yourself?.", vbOKOnly Or vbInformation, "Don't enter your name."
- Exit Sub
- End If
- 'Ok, let's add the friend
- BlockUser sFriend
- End Sub
- Private Sub mnuExit_Click()
- mfExit = True
- Unload Me
- End Sub
- Private Sub mnuLogoff_Click()
- EnableLoggedinUI False
- gfConnected = False
- gfCreatePlayer = False
- gfLoggedIn = False
- gsUserName = vbNullString
- gsPass = vbNullString
- gsServerName = vbNullString
- Me.Caption = "vbMessenger Service (Not logged in)"
- UpdateText "vbMessenger Service (Not logged in)"
- SetupDefaultTree
- 'Initialize DirectPlay
- InitDPlay
- End Sub
- Private Sub mnuLogon_Click()
- 'They want to log on, show the logon screen
- Set oLog = New frmLogin
- oLog.Show , Me
- End Sub
- Private Sub EnableLoggedinUI(ByVal fEnable As Boolean)
- mnuAddFriend.Enabled = fEnable
- mnuBlock.Enabled = fEnable
- mnuLogoff.Enabled = fEnable
- mnuLogon.Enabled = Not fEnable
- End Sub
- Private Sub EnableSendUI(ByVal fEnable As Boolean)
- mnuSend.Enabled = fEnable
- mnuSendIM.Enabled = fEnable
- End Sub
- Private Sub mnuSend_Click()
- mnuSendIM_Click 'Go ahead and send a message
- End Sub
- Private Sub mnuSendIM_Click()
- Dim frm As frmMsgTemplate
- Set frm = GetMsgWindow(tvwFriends.SelectedItem.Text)
- frm.UserName = tvwFriends.SelectedItem.Text
- frm.Show
- frm.SetFocus
- End Sub
- Private Sub tmrExit_Timer()
- If mfServerExit Then 'Gotta quit now
- tmrExit.Enabled = False
- MsgBox "The server has disconnected. This session will now end.", vbOKOnly Or vbInformation, "Exiting..."
- mfExit = True
- Unload Me
- End
- End If
- End Sub
- Private Sub tvwFriends_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
- Dim oNode As Node
- If Button = vbRightButton Then 'They right clicked, should we show the menu?
- If tvwFriends.SelectedItem.Parent Is Nothing Then
- Set oNode = oLeafOffline
- Else
- Set oNode = tvwFriends.SelectedItem
- End If
- If (oNode.Children = 0) And oNode <> oLeafOffline Then
- PopupMenu mnuPop
- End If
- End If
- End Sub
- Private Sub tvwFriends_NodeClick(ByVal Node As MSComctlLib.Node)
- Dim oNode As Node
- If Node.Parent Is Nothing Then
- Set oNode = oLeafOffline
- Else
- Set oNode = Node
- End If
- If (oNode.Children = 0) And oNode <> oLeafOffline Then
- EnableSendUI True
- Else
- EnableSendUI False
- End If
- End Sub
- Private Sub UpdateText(sNewText As String)
- 'modify our icon text
- sysIcon.sTip = sNewText & vbNullChar
- sysIcon.uFlags = NIF_TIP
- Shell_NotifyIcon NIM_MODIFY, sysIcon
- End Sub
- Private Function GetMsgWindow(ByVal sUser As String) As frmMsgTemplate
- 'Let's check to see if there is a window open
- Dim lCount As Long, lNumWindows As Long
- On Error Resume Next
- lNumWindows = UBound(oMsgWnd)
- If Err = 0 Then
- For lCount = 0 To lNumWindows
- If sUser = oMsgWnd(lCount).UserName Then
- Set GetMsgWindow = oMsgWnd(lCount)
- Exit Function
- End If
- Next
- ReDim oMsgWnd(UBound(oMsgWnd) + 1)
- Set oMsgWnd(UBound(oMsgWnd)) = New frmMsgTemplate
- Set GetMsgWindow = oMsgWnd(UBound(oMsgWnd))
- Else
- ReDim oMsgWnd(0)
- Set oMsgWnd(0) = New frmMsgTemplate
- Set GetMsgWindow = oMsgWnd(0)
- End If
-
- End Function
- Private Sub SetupDefaultTree()
- 'Clear the tree first
- tvwFriends.Nodes.Clear
- 'Let's add the two default icons into our treeview
- Set oLeafOnline = tvwFriends.Nodes.Add(, , "OnlineLeafKey", "Friends online", 1, 1)
- Set oLeafOffline = tvwFriends.Nodes.Add(, , "OfflineLeafKey", "Friends offline", 2, 2)
- End Sub
- Private Sub DirectPlay8Event_AddRemovePlayerGroup(ByVal lMsgID As Long, ByVal lPlayerID As Long, ByVal lGroupID As Long, fRejectMsg As Boolean)
- 'VB requires that we must implement *every* member of this interface
- End Sub
- Private Sub DirectPlay8Event_AppDesc(fRejectMsg As Boolean)
- 'VB requires that we must implement *every* member of this interface
- End Sub
- Private Sub DirectPlay8Event_AsyncOpComplete(dpnotify As DxVBLibA.DPNMSG_ASYNC_OP_COMPLETE, fRejectMsg As Boolean)
- 'VB requires that we must implement *every* member of this interface
- End Sub
- Private Sub DirectPlay8Event_ConnectComplete(dpnotify As DxVBLibA.DPNMSG_CONNECT_COMPLETE, fRejectMsg As Boolean)
- If dpnotify.hResultCode <> 0 Then
- MsgBox "The server does not exist or is unavailable.", vbOKOnly Or vbInformation, "Unavailable"
- Else
- If gfCreatePlayer Then
- CreatePlayer 'We're creating a player
- Else
- LogonPlayer 'We're just logging in
- End If
- End If
- gfConnected = True
- End Sub
- Private Sub DirectPlay8Event_CreateGroup(ByVal lGroupID As Long, ByVal lOwnerID As Long, fRejectMsg As Boolean)
- 'VB requires that we must implement *every* member of this interface
- End Sub
- Private Sub DirectPlay8Event_CreatePlayer(ByVal lPlayerID As Long, fRejectMsg As Boolean)
- 'VB requires that we must implement *every* member of this interface
- End Sub
- Private Sub DirectPlay8Event_DestroyGroup(ByVal lGroupID As Long, ByVal lReason As Long, fRejectMsg As Boolean)
- 'VB requires that we must implement *every* member of this interface
- End Sub
- Private Sub DirectPlay8Event_DestroyPlayer(ByVal lPlayerID As Long, ByVal lReason As Long, fRejectMsg As Boolean)
- 'VB requires that we must implement *every* member of this interface
- End Sub
- Private Sub DirectPlay8Event_EnumHostsQuery(dpnotify As DxVBLibA.DPNMSG_ENUM_HOSTS_QUERY, fRejectMsg As Boolean)
- 'VB requires that we must implement *every* member of this interface
- End Sub
- Private Sub DirectPlay8Event_EnumHostsResponse(dpnotify As DxVBLibA.DPNMSG_ENUM_HOSTS_RESPONSE, fRejectMsg As Boolean)
- 'VB requires that we must implement *every* member of this interface
- End Sub
- Private Sub DirectPlay8Event_HostMigrate(ByVal lNewHostID As Long, fRejectMsg As Boolean)
- 'VB requires that we must implement *every* member of this interface
- End Sub
- Private Sub DirectPlay8Event_IndicateConnect(dpnotify As DxVBLibA.DPNMSG_INDICATE_CONNECT, fRejectMsg As Boolean)
- 'VB requires that we must implement *every* member of this interface
- End Sub
- Private Sub DirectPlay8Event_IndicatedConnectAborted(fRejectMsg As Boolean)
- 'VB requires that we must implement *every* member of this interface
- End Sub
- Private Sub DirectPlay8Event_InfoNotify(ByVal lMsgID As Long, ByVal lNotifyID As Long, fRejectMsg As Boolean)
- 'VB requires that we must implement *every* member of this interface
- End Sub
- Private Sub DirectPlay8Event_Receive(dpnotify As DxVBLibA.DPNMSG_RECEIVE, fRejectMsg As Boolean)
- 'We need to get each message we receive from a client, process it, and respond accordingly
- Dim lMsg As Long, lOffset As Long
- Dim oNewMsg() As Byte, lNewOffSet As Long
- Dim sUsername As String, lNumFriends As Long, lCount As Long
- Dim lNewMsg As Long, oNode As Node
- Dim sChat As String, fChatFrm As frmMsgTemplate
- Dim fFriend As Boolean, fFound As Boolean
- With dpnotify
- GetDataFromBuffer .ReceivedData, lMsg, LenB(lMsg), lOffset
- Select Case lMsg 'The server will only receive certain messages. Handle those.
- Case Msg_LoginSuccess 'Login successfully completed.
- 'All we really need to do is get rid of the login screen.
- If Not (oLog Is Nothing) Then
- Unload oLog
- Set oLog = Nothing
- End If
- Unload frmCreate
- gfLoggedIn = True
- EnableLoggedinUI True
- Me.Caption = msAppTitle & " - (" & gsUserName & ")"
- UpdateText msAppTitle & " - (" & gsUserName & ")"
- Case Msg_InvalidPassword 'The server didn't like our password
- 'The password they entered was invalid.
- MsgBox "The password you entered was invalid.", vbOKOnly Or vbInformation, "Not valid."
- oLog.txtPassword = vbNullString
- oLog.txtPassword.SetFocus
- Case Msg_InvalidUser 'We do not exist on this server
- 'This user does not exist
- MsgBox "The username you entered does not exist.", vbOKOnly Or vbInformation, "Not valid."
- Case Msg_UserAlreadyExists 'We can't create this account since the user exists
- 'This user already exists
- MsgBox "The username you entered already exists." & vbCrLf & "You must choose a different one.", vbOKOnly Or vbInformation, "Not valid."
- Case Msg_SendClientFriends 'The server is going to send us a list of our current friends
- GetDataFromBuffer .ReceivedData, lNumFriends, LenB(lNumFriends), lOffset
- 'Ok, now go through and add each friend to our 'offline' list (The server will notify who is online after this message
- For lCount = 1 To lNumFriends
- GetDataFromBuffer .ReceivedData, fFriend, LenB(fFriend), lOffset
- sUsername = GetStringFromBuffer(.ReceivedData, lOffset)
- 'Add this user to our list
- If fFriend Then
- tvwFriends.Nodes.Add oLeafOffline, tvwChild, sUsername, sUsername, 2, 2
- Else
- tvwFriends.Nodes.Add oLeafOffline, tvwChild, sUsername, sUsername & " (BLOCKED)", 2, 2
- End If
- Next
- oLeafOffline.Expanded = True
- oLeafOnline.Expanded = True
- Case Msg_FriendAdded
- sUsername = GetStringFromBuffer(.ReceivedData, lOffset)
- fFound = False
- For Each oNode In tvwFriends.Nodes
- If oNode.Key = sUsername Then
- oNode.Text = sUsername
- fFound = True
- End If
- Next
- If Not fFound Then tvwFriends.Nodes.Add oLeafOffline, tvwChild, sUsername, sUsername, 2, 2
- 'Friend added successfully
- MsgBox sUsername & " added successfully to your friends list.", vbOKOnly Or vbInformation, "Added."
- Case Msg_FriendBlocked
- sUsername = GetStringFromBuffer(.ReceivedData, lOffset)
- fFound = False
- For Each oNode In tvwFriends.Nodes
- If oNode.Key = sUsername Then
- oNode.Text = sUsername & " (BLOCKED)"
- fFound = True
- End If
- Next
- If Not fFound Then tvwFriends.Nodes.Add oLeafOffline, tvwChild, sUsername, sUsername & " (BLOCKED)", 2, 2
- 'Friend blocked successfully
- MsgBox sUsername & " added successfully to your blocked list.", vbOKOnly Or vbInformation, "Added."
-
- Case Msg_FriendDoesNotExist
- 'Friend doesn't exist
- MsgBox "You cannot add this friend, since they do not exist.", vbOKOnly Or vbInformation, "Unknown."
- Case Msg_BlockUserDoesNotExist
- 'Friend doesn't exist
- MsgBox "You cannot block this user, since they do not exist.", vbOKOnly Or vbInformation, "Unknown."
-
- Case Msg_FriendLogon
- 'We need to go through each of the current nodes and see if this is that friend
- sUsername = GetStringFromBuffer(.ReceivedData, lOffset)
- For Each oNode In tvwFriends.Nodes
- If oNode.Key = sUsername And oNode.Children = 0 Then
- oNode.Image = 1: oNode.SelectedImage = 1
- Set oNode.Parent = oLeafOnline
- End If
- Next
- Case Msg_FriendLogoff
- 'We need to go through each of the current nodes and see if this is that friend
- sUsername = GetStringFromBuffer(.ReceivedData, lOffset)
- For Each oNode In tvwFriends.Nodes
- If oNode.Key = sUsername And oNode.Children = 0 Then
- oNode.Image = 2: oNode.SelectedImage = 2
- Set oNode.Parent = oLeafOffline
- End If
- Next
- Case Msg_ReceiveMessage
- 'We need to go through each of the current forms and see if this is friend is loaded
- sUsername = GetStringFromBuffer(.ReceivedData, lOffset)
- sChat = GetStringFromBuffer(.ReceivedData, lOffset)
- Set fChatFrm = GetMsgWindow(sUsername)
- fChatFrm.UserName = sUsername
- fChatFrm.Show
- fChatFrm.SetFocus
- fChatFrm.AddChatMessage sChat
- Case Msg_UserBlocked
- 'This user has blocked me
- sUsername = GetStringFromBuffer(.ReceivedData, lOffset)
- Set fChatFrm = GetMsgWindow(sUsername)
- fChatFrm.UserName = sUsername
- fChatFrm.Show
- fChatFrm.SetFocus
- fChatFrm.AddChatMessage "***** Your message to " & sUsername & " could not be delivered since they have blocked you."
-
- End Select
- End With
- End Sub
- Private Sub DirectPlay8Event_SendComplete(dpnotify As DxVBLibA.DPNMSG_SEND_COMPLETE, fRejectMsg As Boolean)
- 'VB requires that we must implement *every* member of this interface
- End Sub
- Private Sub DirectPlay8Event_TerminateSession(dpnotify As DxVBLibA.DPNMSG_TERMINATE_SESSION, fRejectMsg As Boolean)
- 'We're no longer connected for some reason.
- mfServerExit = True
- End Sub
-