private void HandleLogin(object sender, LogInEventArgs login) { Trace.WriteLine(string.Format("Login: {0}, {1}, {2}", login.LoginPayload.user, login.LoginPayload.password, login.LoginPayload.legacyName)); var connected = new Connected { user = login.LoginPayload.user }; SendMessage(WrapperMessage.Type.TYPE_CONNECTED, connected); }
public OscarPlugin(string host, string port) : base(host, port) { Config.SupportReceipts = true; OscarSessions = new Dictionary<string, Session>(); LoggedIn += (sender, login) => { var newSession = new Session(login.LoginPayload.legacyName, login.LoginPayload.password); OscarSessions.Add(login.LoginPayload.user, newSession); newSession.Messaging.MessageReceived += message => { var currentUser = OscarSessions.FirstOrDefault(k => k.Value == newSession).Key; if (currentUser == null) return; var convMessage = new ConversationMessage { userName = currentUser, buddyName = message.Contact.Uin, message = message.Text }; SendMessage(WrapperMessage.Type.TYPE_CONV_MESSAGE, convMessage); }; newSession.Connected += (o, args) => { var currentUser = OscarSessions.FirstOrDefault(k => k.Value == newSession).Key; if (currentUser == null) return; var connected = new Connected {user = currentUser}; SendMessage(WrapperMessage.Type.TYPE_CONNECTED, connected); }; newSession.ContactList.ContactSignedOn += contact => ContactChanged(newSession, contact); newSession.ContactList.ContactSignedOff += contact => ContactChanged(newSession, contact); newSession.ContactList.ContactRemoved += contact => ContactChanged(newSession, contact); newSession.ContactList.ContactAdded += contact => ContactChanged(newSession, contact); newSession.ContactList.ContactStatusChanged += contact => ContactChanged(newSession, contact); newSession.ContactList.ContactListReceived += (o, args) => newSession.ContactList.Contacts.ForEach(c => ContactChanged(newSession, c)); newSession.Connect(); }; LoggedOut += (sender, logout) => { if (!OscarSessions.ContainsKey(logout.LogoutPayload.user)) return; OscarSessions[logout.LogoutPayload.user].Disconnect(); OscarSessions[logout.LogoutPayload.user].Dispose(); OscarSessions.Remove(logout.LogoutPayload.user); }; ConversationMessage += (sender, message) => { var session = OscarSessions[message.ConversationMessagePayload.userName]; var contact = session.ContactList.Contacts.FirstOrDefault( c => c.Uin.Equals(message.ConversationMessagePayload.buddyName)); if (contact == null) return; /*var datetime = (new DateTime(1970, 1, 1, 0, 0, 0, 0)).AddSeconds( long.Parse(message.ConversationMessagePayload.timestamp));*/ session.Messaging.Send(new Message(contact, MessageType.Outgoing, //datetime, message.ConversationMessagePayload.message)); if (!string.IsNullOrEmpty(message.ConversationMessagePayload.id)) { var ack = new ConversationMessage { id = message.ConversationMessagePayload.id, userName = message.ConversationMessagePayload.userName, buddyName = message.ConversationMessagePayload.buddyName, message = "" }; SendMessage(WrapperMessage.Type.TYPE_CONV_MESSAGE_ACK, ack); } }; }