llinstantmessage.h
上传用户:king477883
上传日期:2021-03-01
资源大小:9553k
文件大小:9k
源码类别:

游戏引擎

开发平台:

C++ Builder

  1. /** 
  2.  * @file llinstantmessage.h
  3.  * @brief Constants and declarations used by instant messages. 
  4.  *
  5.  * $LicenseInfo:firstyear=2002&license=viewergpl$
  6.  * 
  7.  * Copyright (c) 2002-2010, Linden Research, Inc.
  8.  * 
  9.  * Second Life Viewer Source Code
  10.  * The source code in this file ("Source Code") is provided by Linden Lab
  11.  * to you under the terms of the GNU General Public License, version 2.0
  12.  * ("GPL"), unless you have obtained a separate licensing agreement
  13.  * ("Other License"), formally executed by you and Linden Lab.  Terms of
  14.  * the GPL can be found in doc/GPL-license.txt in this distribution, or
  15.  * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
  16.  * 
  17.  * There are special exceptions to the terms and conditions of the GPL as
  18.  * it is applied to this Source Code. View the full text of the exception
  19.  * in the file doc/FLOSS-exception.txt in this software distribution, or
  20.  * online at
  21.  * http://secondlifegrid.net/programs/open_source/licensing/flossexception
  22.  * 
  23.  * By copying, modifying or distributing this software, you acknowledge
  24.  * that you have read and understood your obligations described above,
  25.  * and agree to abide by those obligations.
  26.  * 
  27.  * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
  28.  * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
  29.  * COMPLETENESS OR PERFORMANCE.
  30.  * $/LicenseInfo$
  31.  */
  32. #ifndef LL_LLINSTANTMESSAGE_H
  33. #define LL_LLINSTANTMESSAGE_H
  34. #include "llhost.h"
  35. #include "lluuid.h"
  36. #include "llsd.h"
  37. #include "llrefcount.h"
  38. #include "llpointer.h"
  39. #include "v3math.h"
  40. class LLMessageSystem;
  41. // The ImprovedInstantMessage only supports 8 bits in the "Dialog"
  42. // field, so don't go past the byte boundary
  43. enum EInstantMessage
  44. {
  45. // default. ID is meaningless, nothing in the binary bucket.
  46. IM_NOTHING_SPECIAL = 0,
  47. // pops a messagebox with a single OK button
  48. IM_MESSAGEBOX = 1,
  49. // pops a countdown messagebox with a single OK button
  50. // IM_MESSAGEBOX_COUNTDOWN = 2,
  51. // You've been invited to join a group.
  52. // ID is the group id.
  53. // The binary bucket contains a null terminated string
  54. // representation of the officer/member status and join cost for
  55. // the invitee. (bug # 7672) The format is 1 byte for
  56. // officer/member (O for officer, M for member), and as many bytes
  57. // as necessary for cost.
  58. IM_GROUP_INVITATION = 3,
  59. // Inventory offer.
  60. // ID is the transaction id
  61. // Binary bucket is a list of inventory uuid and type. 
  62. IM_INVENTORY_OFFERED = 4,
  63. IM_INVENTORY_ACCEPTED = 5,
  64. IM_INVENTORY_DECLINED = 6,
  65. // Group vote
  66. // Name is name of person who called vote.
  67. // ID is vote ID used for internal tracking
  68. // TODO: _DEPRECATED suffix as part of vote removal - DEV-24856
  69. IM_GROUP_VOTE = 7,
  70. // Group message
  71. // This means that the message is meant for everyone in the
  72. // agent's group. This will result in a database query to find all
  73. // participants and start an im session.
  74. IM_GROUP_MESSAGE_DEPRECATED = 8,
  75. // Task inventory offer.
  76. // ID is the transaction id
  77. // Binary bucket is a (mostly) complete packed inventory item
  78. IM_TASK_INVENTORY_OFFERED = 9,
  79. IM_TASK_INVENTORY_ACCEPTED = 10,
  80. IM_TASK_INVENTORY_DECLINED = 11,
  81. // Copied as pending, type LL_NOTHING_SPECIAL, for new users
  82. // used by offline tools
  83. IM_NEW_USER_DEFAULT = 12,
  84. //
  85. // session based messaging - the way that people usually actually
  86. // communicate with each other.
  87. //
  88. // Invite users to a session.
  89. IM_SESSION_INVITE = 13,
  90. IM_SESSION_P2P_INVITE = 14,
  91. // start a session with your gruop
  92. IM_SESSION_GROUP_START = 15,
  93. // start a session without a calling card (finder or objects)
  94. IM_SESSION_CONFERENCE_START = 16,
  95. // send a message to a session.
  96. IM_SESSION_SEND = 17,
  97. // leave a session
  98. IM_SESSION_LEAVE = 18,
  99. // an instant message from an object - for differentiation on the
  100. // viewer, since you can't IM an object yet.
  101. IM_FROM_TASK = 19,
  102. // sent an IM to a busy user, this is the auto response
  103. IM_BUSY_AUTO_RESPONSE = 20,
  104. // Shows the message in the console and chat history
  105. IM_CONSOLE_AND_CHAT_HISTORY = 21,
  106. // IM Types used for luring your friends
  107. IM_LURE_USER = 22,
  108. IM_LURE_ACCEPTED = 23,
  109. IM_LURE_DECLINED = 24,
  110. IM_GODLIKE_LURE_USER = 25,
  111. IM_YET_TO_BE_USED = 26,
  112. // IM that notifie of a new group election.
  113. // Name is name of person who called vote.
  114. // ID is election ID used for internal tracking
  115. IM_GROUP_ELECTION_DEPRECATED = 27,
  116. // IM to tell the user to go to an URL. Put a text message in the
  117. // message field, and put the url with a trailing  in the binary
  118. // bucket.
  119. IM_GOTO_URL = 28,
  120. // a message generated by a script which we don't want to
  121. // be sent through e-mail.  Similar to IM_FROM_TASK, but
  122. // it is shown as an alert on the viewer.
  123. IM_FROM_TASK_AS_ALERT = 31,
  124. // IM from group officer to all group members.
  125. IM_GROUP_NOTICE = 32,
  126. IM_GROUP_NOTICE_INVENTORY_ACCEPTED = 33,
  127. IM_GROUP_NOTICE_INVENTORY_DECLINED = 34,
  128. IM_GROUP_INVITATION_ACCEPT = 35,
  129. IM_GROUP_INVITATION_DECLINE = 36,
  130. IM_GROUP_NOTICE_REQUESTED = 37,
  131. IM_FRIENDSHIP_OFFERED = 38,
  132. IM_FRIENDSHIP_ACCEPTED = 39,
  133. IM_FRIENDSHIP_DECLINED_DEPRECATED = 40,
  134. IM_TYPING_START = 41,
  135. IM_TYPING_STOP = 42,
  136. IM_COUNT
  137. };
  138. // Hooks for quickly hacking in experimental admin debug messages 
  139. // without needing to recompile the viewer
  140. // *NOTE: This functionality has been moved to be a string based
  141. // operation so that we don't even have to do a full recompile. This
  142. // enumeration will be phased out soon.
  143. enum EGodlikeRequest
  144. {
  145. GOD_WANTS_NOTHING,
  146. // for requesting physics information about an object
  147. GOD_WANTS_PHYSICS_INFO,
  148. // two unused requests that can be appropriated for debug 
  149. // purposes (no viewer recompile necessary)
  150. GOD_WANTS_FOO,
  151. GOD_WANTS_BAR,
  152. // to dump simulator terrain data to terrain.raw file
  153. GOD_WANTS_TERRAIN_SAVE,
  154. // to load simulator terrain data from terrain.raw file
  155. GOD_WANTS_TERRAIN_LOAD,
  156. GOD_WANTS_TOGGLE_AVATAR_GEOMETRY, // HACK for testing new avatar geom
  157. // real-time telehub operations
  158. GOD_WANTS_TELEHUB_INFO,
  159. GOD_WANTS_CONNECT_TELEHUB,
  160. GOD_WANTS_DELETE_TELEHUB,
  161. GOD_WANTS_ADD_TELEHUB_SPAWNPOINT,
  162. GOD_WANTS_REMOVE_TELEHUB_SPAWNPOINT,
  163. };
  164. enum EIMSource
  165. {
  166. IM_FROM_VIEWER,
  167. IM_FROM_DATASERVER,
  168. IM_FROM_SIM
  169. };
  170. extern const U8 IM_ONLINE;
  171. extern const U8 IM_OFFLINE;
  172. extern const S32 VOTE_YES;
  173. extern const S32 VOTE_NO;
  174. extern const S32 VOTE_ABSTAIN;
  175. extern const S32 VOTE_MAJORITY;
  176. extern const S32 VOTE_SUPER_MAJORITY;
  177. extern const S32 VOTE_UNANIMOUS;
  178. extern const char EMPTY_BINARY_BUCKET[];
  179. extern const S32 EMPTY_BINARY_BUCKET_SIZE;
  180. extern const U32 NO_TIMESTAMP;
  181. extern const std::string SYSTEM_FROM;
  182. // Number of retry attempts on sending the im.
  183. extern const S32 IM_TTL;
  184. class LLIMInfo : public LLRefCount
  185. {
  186. protected:
  187. LLIMInfo();
  188. ~LLIMInfo();
  189. public:
  190. LLIMInfo(LLMessageSystem* msg, 
  191. EIMSource source = IM_FROM_SIM, 
  192. S32 ttl = IM_TTL);
  193. LLIMInfo(
  194. const LLUUID& from_id,
  195. BOOL from_group,
  196. const LLUUID& to_id,
  197. EInstantMessage im_type, 
  198. const std::string& name,
  199. const std::string& message,
  200. const LLUUID& id,
  201. U32 parent_estate_id,
  202. const LLUUID& region_id,
  203. const LLVector3& position,
  204. LLSD data,
  205. U8 offline,
  206. U32 timestamp,
  207. EIMSource source,
  208. S32 ttl = IM_TTL);
  209. void packInstantMessage(LLMessageSystem* msg) const;
  210. void packMessageBlock(LLMessageSystem* msg) const;
  211. void unpackMessageBlock(LLMessageSystem* msg);
  212. LLPointer<LLIMInfo> clone();
  213. public:
  214. LLUUID mFromID;
  215. BOOL mFromGroup;
  216. LLUUID mToID;
  217. U32 mParentEstateID;
  218. LLUUID mRegionID;
  219. LLVector3 mPosition;
  220. U8 mOffline;
  221. bool mViewerThinksToIsOnline;
  222. EInstantMessage mIMType; 
  223. LLUUID mID;
  224. U32 mTimeStamp;
  225. std::string mName;
  226. std::string mMessage;
  227. LLSD mData;
  228. EIMSource mSource;
  229. S32 mTTL;
  230. };
  231. LLPointer<LLIMInfo> llsd_to_im_info(const LLSD& im_info_sd);
  232. LLSD im_info_to_llsd(LLPointer<LLIMInfo> im_info);
  233. void pack_instant_message(
  234. LLMessageSystem* msgsystem,
  235. const LLUUID& from_id,
  236. BOOL from_group,
  237. const LLUUID& session_id,
  238. const LLUUID& to_id,
  239. const std::string& name,
  240. const std::string& message,
  241. U8 offline = IM_ONLINE,
  242. EInstantMessage dialog = IM_NOTHING_SPECIAL,
  243. const LLUUID& id = LLUUID::null,
  244. U32 parent_estate_id = 0,
  245. const LLUUID& region_id = LLUUID::null,
  246. const LLVector3& position = LLVector3::zero,
  247. U32 timestamp = NO_TIMESTAMP, 
  248. const U8* binary_bucket = (U8*)EMPTY_BINARY_BUCKET,
  249. S32 binary_bucket_size = EMPTY_BINARY_BUCKET_SIZE);
  250. void pack_instant_message_block(
  251. LLMessageSystem* msgsystem,
  252. const LLUUID& from_id,
  253. BOOL from_group,
  254. const LLUUID& session_id,
  255. const LLUUID& to_id,
  256. const std::string& name,
  257. const std::string& message,
  258. U8 offline = IM_ONLINE,
  259. EInstantMessage dialog = IM_NOTHING_SPECIAL,
  260. const LLUUID& id = LLUUID::null,
  261. U32 parent_estate_id = 0,
  262. const LLUUID& region_id = LLUUID::null,
  263. const LLVector3& position = LLVector3::zero,
  264. U32 timestamp = NO_TIMESTAMP, 
  265. const U8* binary_bucket = (U8*)EMPTY_BINARY_BUCKET,
  266. S32 binary_bucket_size = EMPTY_BINARY_BUCKET_SIZE);
  267. #endif // LL_LLINSTANTMESSAGE_H