icqlink.h
上传用户:zslianheng
上传日期:2013-04-03
资源大小:946k
文件大小:3k
源码类别:

Linux/Unix编程

开发平台:

Visual C++

  1. /***************************************************************************
  2.  *                                                                         *
  3.  *   This program is free software; you can redistribute it and/or modify  *
  4.  *   it under the terms of the GNU General Public License as published by  *
  5.  *   the Free Software Foundation; either version 2 of the License, or     *
  6.  *   (at your option) any later version.                                   *
  7.  *                                                                         *
  8.  *   copyright            : (C) 2002 by Zhang Yong                         *
  9.  *   email                : z-yong163@163.com                              *
  10.  ***************************************************************************/
  11. #ifndef _ICQ_LINK_H
  12. #define _ICQ_LINK_H
  13. #include "icqclient.h"
  14. #include "icqlinkbase.h"
  15. class IcqSession;
  16. class IcqWindow;
  17. class IcqPlugin;
  18. class TcpSession;
  19. class IcqLink : public IcqLinkBase {
  20. public:
  21. IcqLink();
  22. virtual ~IcqLink();
  23. bool isProxyType(int type) {
  24. return (options.flags.test(UF_USE_PROXY) && (options.proxyType == type));
  25. }
  26. void checkSendQueue();
  27. IcqSession *createSession(const char *name, uint32 uin);
  28. TcpSession *acceptSession(int listenSock, const char *name);
  29. uint32 sendMessage(uint8 type, uint32 to, const char *text);
  30. void onRecvMessage(uint8 type, uint32 from, uint32 when, const char *text, bool relay);
  31. uint32 sendTcpRequest(const char *name, IcqContact *c, const char *text);
  32. void acceptTcpRequest(const char *name, IcqContact *c, uint16 port);
  33. virtual void onNewUINReply(uint32 uin) = 0;
  34. virtual void onContactListReply(UinList &l) = 0;
  35. virtual void onLoginReply(uint16 error) = 0;
  36. virtual void onUpdateContactReply(IcqContact *info);
  37. virtual void onUpdateUserReply() = 0;
  38. virtual void onUserOnline(uint32 uin, uint32 status, uint32 ip, uint16 port, uint32 realIP, bool multi = false) = 0;
  39. virtual void onUserOffline(uint32 uin);
  40. virtual void onStatusChanged(uint32 uin, uint32 status) = 0;
  41. virtual void onUserFound(PtrList *l) = 0;
  42. virtual void onAddFriendReply(uint32 uin, uint8 result) = 0;
  43. virtual void onRecvMessage(IcqMsg *msg) = 0;
  44. virtual void onConnect(bool success) = 0;
  45. virtual ContactInfo *getContactInfo(uint32 uin);
  46. virtual TcpSessionBase *createTcpSession(TcpSessionListener *l, uint32 ip, uint16 port);
  47. virtual void destroySession(const char *name, uint32 uin);
  48. virtual void onSendError(uint32 seq);
  49. void onAck(uint32 seq);
  50. void addPendingMsg(IcqMsg *msg);
  51. IcqContact *findContact(uint32 uin, int type = -1);
  52. IcqWindow *findWindow(int type, uint32 uin = 0, uint32 seq = 0);
  53. IcqWindow *findWindowSeq(uint32 seq);
  54. IcqSession *findSession(const char *name, uint32 uin);
  55. IcqMsg *findPendingMsg(uint32 uin);
  56. uint32 socksIP;
  57. IcqUser myInfo;
  58. IcqOption options;
  59. PtrList sessionList;
  60. PtrList windowList;
  61. PtrList msgList;
  62. protected:
  63. void logout();
  64. void destroyUser();
  65. uint16 createListenSession(const char *name);
  66. void destroySession(uint32 uin);
  67. void destroySession();
  68. void destroyContact(uint32 uin);
  69. PtrList contactList;
  70. };
  71. extern IcqLink *icqLink;
  72. class ServerSession;
  73. inline ServerSession *serverSession()
  74. {
  75. return (ServerSession *) icqLink->sessionList.front();
  76. }
  77. #endif