Просмотр исходного кода

display signoff event even when user is not on buddy list

Mike 3 лет назад
Родитель
Сommit
2fe2b85ccc
5 измененных файлов с 19 добавлено и 62 удалено
  1. 3 1
      cmd/main.go
  2. 13 21
      oscar/buddy.go
  3. 3 2
      oscar/feedbag_store.go
  4. 0 37
      oscar/icbm.go
  5. 0 1
      oscar/oservice.go

+ 3 - 1
cmd/main.go

@@ -109,7 +109,9 @@ func handleAuthConnection(sm *oscar.SessionManager, fm *oscar.FeedbagStore, conn
 func handleBOSConnection(sm *oscar.SessionManager, fm *oscar.FeedbagStore, conn net.Conn) {
 	if err := oscar.ReadBos(sm, fm, conn); err != nil && err != io.EOF {
 		if err != io.EOF {
-			fmt.Println(err.Error())
+			fmt.Printf("user disconnected with error: %s\n", err.Error())
+		} else {
+			fmt.Println("user disconnected")
 		}
 	}
 }

+ 13 - 21
oscar/buddy.go

@@ -163,7 +163,6 @@ func NotifyArrival(sess *Session, sm *SessionManager, fm *FeedbagStore) error {
 		snacFrameOut := snacFrame{
 			foodGroup: BUDDY,
 			subGroup:  BuddyArrived,
-			requestID: 12425,
 		}
 		snacPayloadOut := &snacBuddyArrived{
 			screenName:   sess.ScreenName,
@@ -190,28 +189,21 @@ func NotifyDeparture(sess *Session, sm *SessionManager, fm *FeedbagStore) error
 	sessions := sm.RetrieveByScreenNames(screenNames)
 
 	for _, adjSess := range sessions {
-		flap := &flapFrame{
-			startMarker: 42,
-			frameType:   2,
-		}
-
-		snacFrameOut := snacFrame{
-			foodGroup: BUDDY,
-			subGroup:  BuddyDeparted,
-		}
-		snacPayloadOut := &snacBuddyArrived{
-			screenName:   sess.ScreenName,
-			warningLevel: sess.GetWarning(),
-			TLVPayload: TLVPayload{
-				TLVs: []*TLV{},
-			},
-		}
-
 		adjSess.SendMessage(&XMessage{
-			flap:      flap,
-			snacFrame: snacFrameOut,
-			snacOut:   snacPayloadOut,
+			flap: &flapFrame{
+				startMarker: 42,
+				frameType:   2,
+			},
+			snacFrame: snacFrame{
+				foodGroup: BUDDY,
+				subGroup:  BuddyDeparted,
+			},
+			snacOut: &snacBuddyArrived{
+				screenName:   sess.ScreenName,
+				warningLevel: sess.GetWarning(),
+			},
 		})
 	}
+
 	return nil
 }

+ 3 - 2
oscar/feedbag_store.go

@@ -182,11 +182,12 @@ func (f *FeedbagStore) Upsert(screenName string, items []*feedbagItem) error {
 	return nil
 }
 
+// InterestedUsers returns all users who have screenName in their buddy list.
 func (f *FeedbagStore) InterestedUsers(screenName string) ([]string, error) {
 	q := `
-		SELECT name
+		SELECT ScreenName
 		FROM feedbag
-		WHERE ScreenName = ? AND classID = 0
+		WHERE name = ? AND classID = 0
 	`
 
 	rows, err := f.db.Query(q, screenName)

+ 0 - 37
oscar/icbm.go

@@ -396,43 +396,6 @@ func (m *messageData) write(w io.Writer) error {
 	return nil
 }
 
-func SendIM(sm *SessionManager, sess *Session, destScreenName string, msg string) error {
-
-	session, err := sm.RetrieveByScreenName(destScreenName)
-	if err != nil {
-		return err
-	}
-
-	session.SendMessage(&XMessage{
-		flap: &flapFrame{
-			startMarker: 42,
-			frameType:   2,
-		},
-		snacFrame: snacFrame{
-			foodGroup: ICBM,
-			subGroup:  ICBMChannelMsgToclient,
-			requestID: 12425,
-		},
-		snacOut: &snacClientIM{
-			cookie:     [8]byte{1, 2, 3, 4, 5, 6, 7, 8},
-			channelID:  1,
-			screenName: sess.ScreenName,
-			TLVPayload: TLVPayload{
-				TLVs: []*TLV{
-					{
-						tType: 0x02,
-						val: &messageData{
-							text: msg,
-						},
-					},
-				},
-			},
-		},
-	})
-
-	return nil
-}
-
 type snacClientErr struct {
 	cookie     [8]byte
 	channelID  uint16

+ 0 - 1
oscar/oservice.go

@@ -521,7 +521,6 @@ func GetOnlineBuddies(w io.Writer, sess *Session, sm *SessionManager, fm *Feedba
 		snacFrameOut := snacFrame{
 			foodGroup: BUDDY,
 			subGroup:  BuddyArrived,
-			requestID: 12425,
 		}
 		snacPayloadOut := &snacBuddyArrived{
 			screenName:   buddies,