PlazaRoomEvent.cs 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488
  1. using UnityEngine;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using LitJson;
  6. using Sfs2X;
  7. using Sfs2X.Core;
  8. using Sfs2X.Entities;
  9. using Sfs2X.Requests;
  10. using Sfs2X.Entities.Data;
  11. using UnityEngine.UI;
  12. using Random = UnityEngine.Random;
  13. public class PlazaRoomEvent
  14. {
  15. #region Config
  16. public Room CurrentPlazaRoom;
  17. public SFSEventManager SFSEventManager;
  18. public static string PlazaRoomGroupID = "Default";
  19. #endregion
  20. public PlazaRoomEvent(SFSEventManager eventManager)
  21. {
  22. SFSEventManager = eventManager;
  23. }
  24. public void GetRoomData(int startIndex)
  25. {
  26. SFSObject parameter = new SFSObject();
  27. parameter.PutInt(SFSLabel.CommandID, PlazaRoomReq.GetRoomData.GetHashCode());
  28. parameter.PutInt(SFSLabel.Data, startIndex);
  29. SFSEventManager.GardenSmartFox.AddRequest(parameter, RequestType.Immediate);
  30. }
  31. public void GetCustomRoomData(int startIndex, long serialNumber)
  32. {
  33. SFSObject parameter = new SFSObject();
  34. parameter.PutInt(SFSLabel.CommandID, PlazaRoomReq.GetCustomRoomData.GetHashCode());
  35. parameter.PutInt(SFSLabel.Data, startIndex);
  36. parameter.PutLong(SFSLabel.UserID, serialNumber);
  37. SFSEventManager.GardenSmartFox.AddRequest(parameter, RequestType.Immediate);
  38. }
  39. public void GetRoomFullStatus(List<int> databaseRoomIDs)
  40. {
  41. SFSObject parameter = new SFSObject();
  42. parameter.PutIntArray(SFSLabel.DataArray, databaseRoomIDs.ToArray());
  43. parameter.PutInt(SFSLabel.CommandID, PlazaRoomReq.GetRoomFullStatus.GetHashCode());
  44. SFSEventManager.GardenSmartFox.AddRequest(parameter, RequestType.Immediate);
  45. }
  46. public void CreateRoom(string roomName, long serialNumber, int duration, int maxPlayer, int value)
  47. {
  48. SFSManager.GardenSmartFox.ExecuteAfterCheckConection
  49. (
  50. () =>
  51. {
  52. SFSObject parameter = new SFSObject();
  53. parameter.PutUtfString(SFSLabel.RoomName, roomName);
  54. parameter.PutLong(SFSLabel.UserID, serialNumber);
  55. parameter.PutInt(gd_room.Duration, duration);
  56. parameter.PutInt(gd_room.MaxPlayer, maxPlayer);
  57. parameter.PutInt(SFSLabel.ChestValue, value);
  58. parameter.PutInt(SFSLabel.CommandID, PlazaRoomReq.CreateRoom.GetHashCode());
  59. SFSManager.GardenSmartFox.AddRequest(parameter, RequestType.Immediate);
  60. },
  61. (succeed, baseEvent) =>{ if (!succeed) SFSManager.GardenSmartFox.EventManager.PlazaRoomEvent.OnCreateRoomError(baseEvent); },
  62. (succeed, baseEvent) => { if (!succeed) SFSManager.GardenSmartFox.EventManager.PlazaRoomEvent.OnCreateRoomError(baseEvent); }
  63. );
  64. }
  65. public void JoinPlazaRoom(int databaseRoomID)
  66. {
  67. SFSManager.GardenSmartFox.ExecuteAfterCheckConection
  68. (
  69. () =>
  70. {
  71. SFSObject parameter = new SFSObject();
  72. parameter.PutInt(SFSLabel.CommandID, PlazaRoomReq.JoinRoom.GetHashCode());
  73. parameter.PutInt(SFSLabel.DatabaseRoomID, databaseRoomID);
  74. SFSEventManager.GardenSmartFox.AddRequest(parameter, RequestType.Immediate);
  75. },
  76. (succeed, baseEvent) => { if(!succeed) OnJoinPlazaRoomError(baseEvent); },
  77. (succeed, baseEvent) => { if (!succeed) OnJoinPlazaRoomError(baseEvent); }
  78. );
  79. }
  80. public void SendInstantiateRequset(int senderID, int[] dressDataIDs, string serialNumber, DateTime joinedTime, Vector3 position, PlayerDirection direction, string nickname, int receiverID)
  81. {
  82. SFSObject parameter = new SFSObject();
  83. parameter.PutInt(SFSLabel.InfoID, InfoID.Instantiate.GetHashCode());
  84. parameter.PutInt(InfoLabel.SenderID.GetHashString(), senderID);
  85. parameter.PutIntArray(InfoLabel.Close.GetHashString(), dressDataIDs);
  86. parameter.PutUtfString(InfoLabel.Position.GetHashString(), position.ToStr());
  87. parameter.PutInt(InfoLabel.PlayerDirection.GetHashString(), direction.GetHashCode());
  88. parameter.PutUtfString(InfoLabel.NickName.GetHashString(), nickname);
  89. parameter.PutUtfString(InfoLabel.SerialNumber.GetHashString(), serialNumber);
  90. parameter.PutLong(InfoLabel.JoinedTime.GetHashString(), joinedTime.Ticks);
  91. SFSEventManager.GardenSmartFox.AddRequest(WrapInfoRequest(CurrentPlazaRoom.Id, receiverID, parameter), RequestType.Immediate);
  92. }
  93. public void SendSynchronizeDestination(int senderID, Vector3 destination)
  94. {
  95. SFSObject sfsObject = new SFSObject();
  96. sfsObject.PutInt(SFSLabel.InfoID, InfoID.Synchronize.GetHashCode());
  97. sfsObject.PutInt(InfoLabel.SenderID.GetHashString(), senderID);
  98. sfsObject.PutUtfString(InfoLabel.Destination.GetHashString(), destination.ToStr());
  99. if (SFSEventManager.GardenSmartFox.PlazaRoomController.CurrentPlazaRoom != null)
  100. {
  101. SFSObject parameter = WrapInfoRequest(SFSEventManager.GardenSmartFox.PlazaRoomController.CurrentPlazaRoom.Id, -1, sfsObject);
  102. SFSEventManager.GardenSmartFox.AddRequest(parameter, RequestType.BatchAndOverride, RequestName.SynchronizePosition, BatchOption.TryNot);
  103. }
  104. else
  105. {
  106. Debug.LogWarning("null");
  107. }
  108. }
  109. public void SendSynchronizeClose(List<int> closeIDs)
  110. {
  111. SFSObject sfsObject = new SFSObject();
  112. sfsObject.PutInt(SFSLabel.InfoID, InfoID.Synchronize.GetHashCode());
  113. sfsObject.PutInt(InfoLabel.SenderID.GetHashString(), SFSEventManager.GardenSmartFox.User.Id);
  114. sfsObject.PutIntArray(InfoLabel.Close.GetHashString(), closeIDs.ToArray());
  115. SFSObject parameter = WrapInfoRequest(SFSEventManager.GardenSmartFox.PlazaRoomController.CurrentPlazaRoom.Id, -1, sfsObject);
  116. SFSEventManager.GardenSmartFox.AddRequest(parameter, RequestType.BatchAndOverride, RequestName.SynchronizeClose);
  117. }
  118. public void SendExpression(ExpressionID expressionID)
  119. {
  120. SFSObject sfsObject = new SFSObject();
  121. sfsObject.PutInt(SFSLabel.InfoID, InfoID.ReceiveExpression.GetHashCode());
  122. sfsObject.PutInt(InfoLabel.SenderID.GetHashString(), SFSEventManager.GardenSmartFox.User.Id);
  123. sfsObject.PutInt(InfoLabel.Expression.GetHashString(), expressionID.GetHashCode());
  124. SFSObject parameter = WrapInfoRequest(SFSEventManager.GardenSmartFox.PlazaRoomController.CurrentPlazaRoom.Id, -1, sfsObject);
  125. SFSEventManager.GardenSmartFox.AddRequest(parameter, RequestType.Immediate);
  126. }
  127. public void SendPublicMessage(string message)
  128. {
  129. SFSObject sfsObject = new SFSObject();
  130. sfsObject.PutInt(SFSLabel.InfoID, InfoID.ReceivePublicMessage.GetHashCode());
  131. sfsObject.PutInt(InfoLabel.SenderID.GetHashString(), SFSEventManager.GardenSmartFox.User.Id);
  132. sfsObject.PutUtfString(InfoLabel.Message.GetHashString(), message);
  133. SFSObject parameter = WrapInfoRequest(SFSEventManager.GardenSmartFox.PlazaRoomController.CurrentPlazaRoom.Id, -1, sfsObject);
  134. SFSEventManager.GardenSmartFox.AddRequest(parameter, RequestType.Immediate);
  135. }
  136. public void OnReceiveInfo(BaseEvent baseEvent)
  137. {
  138. ISFSObject arg = (baseEvent.Params[SFSLabel.DefaultParams] as ISFSObject).GetSFSObject(SFSLabel.Data);
  139. int infoID = arg.GetInt(SFSLabel.InfoID);
  140. if (infoID == InfoID.Instantiate.GetHashCode())
  141. {
  142. OnInstantiate(arg);
  143. }
  144. else if (infoID == InfoID.Synchronize.GetHashCode())
  145. {
  146. OnSynchronize(arg);
  147. }
  148. else if (infoID == InfoID.ReceiveExpression.GetHashCode())
  149. {
  150. OnReceiveExpression(arg);
  151. }
  152. else if (infoID == InfoID.ReceivePublicMessage.GetHashCode())
  153. {
  154. OnReceivePublicMessage(arg);
  155. }
  156. }
  157. public void OnInstantiate(ISFSObject arg)
  158. {
  159. int senderID = arg.GetInt(InfoLabel.SenderID.GetHashString());
  160. SFSEventManager.GardenSmartFox.PlazaRoomController.OnInstantiate(senderID, arg);
  161. }
  162. public void OnSynchronize(ISFSObject arg)
  163. {
  164. int senderID = arg.GetInt(InfoLabel.SenderID.GetHashString());
  165. SFSEventManager.GardenSmartFox.PlazaRoomController.Synchronize(senderID, arg);
  166. }
  167. public void OnReceiveExpression(ISFSObject arg)
  168. {
  169. int senderID = arg.GetInt(InfoLabel.SenderID.GetHashString());
  170. int expressionID = arg.GetInt(InfoLabel.Expression.GetHashString());
  171. SFSEventManager.GardenSmartFox.PlazaRoomController.ReceiveExpression(expressionID, senderID);
  172. }
  173. public void OnReceivePublicMessage(ISFSObject arg)
  174. {
  175. int senderID = arg.GetInt(InfoLabel.SenderID.GetHashString());
  176. string message = arg.GetUtfString(InfoLabel.Message.GetHashString());
  177. SFSEventManager.GardenSmartFox.PlazaRoomController.ReceivePublicMessage(message, senderID);
  178. }
  179. public void CreateChest(int round, int value, ChestType type, int databaseRoomID, long serialNumber, Vector3 position)
  180. {
  181. SFSObject parameter = new SFSObject();
  182. parameter.PutInt(SFSLabel.CommandID, PlazaRoomReq.CreateChest.GetHashCode());
  183. parameter.PutInt(gd_chest.Round, round);
  184. parameter.PutInt(gd_chest.Value, value);
  185. parameter.PutInt(gd_chest.Type, type.GetHashCode());
  186. parameter.PutInt(SFSLabel.DatabaseRoomID, databaseRoomID);
  187. parameter.PutLong(SFSLabel.UserID, serialNumber);
  188. parameter.PutUtfString(gd_chest.Position, position.ToStr(2));
  189. SFSEventManager.GardenSmartFox.AddRequest(parameter, RequestType.Immediate);
  190. }
  191. public void OnCreateChestError(BaseEvent baseEvent)
  192. {
  193. ChestManager.OnCreateChestError();
  194. }
  195. public void OnCreateChestSucceed(BaseEvent baseEvent)
  196. {
  197. ChestManager.OnCreateChestSucceed();
  198. }
  199. public void OnReceiveNewChest(BaseEvent baseEvent)
  200. {
  201. ISFSObject parameter = (ISFSObject)baseEvent.Params[SFSLabel.DefaultParams];
  202. ChestData chestData = new ChestData(parameter.GetSFSObject(SFSLabel.Data));
  203. ChestManager.OnReceiveNewChest(chestData);
  204. }
  205. public void GetChestExpireStatus(List<long> chestIDs)
  206. {
  207. SFSManager.GardenSmartFox.ExecuteAfterCheckConection
  208. (
  209. () =>
  210. {
  211. SFSObject parameter = new SFSObject();
  212. parameter.PutInt(SFSLabel.CommandID, PlazaRoomReq.GetChestExpireStatus.GetHashCode());
  213. parameter.PutLongArray(SFSLabel.DataArray, chestIDs.ToArray());
  214. SFSEventManager.GardenSmartFox.AddRequest(parameter, RequestType.Immediate);
  215. }
  216. );
  217. }
  218. public void OnReceiveChestExpireStatus(BaseEvent baseEvent)
  219. {
  220. ISFSObject obj = baseEvent.Params[SFSLabel.DefaultParams] as ISFSObject;
  221. long[] chestIDs = obj.GetLongArray(SFSLabel.DataArray);
  222. ChestManager.OnReceiveChestExpireStatus(chestIDs.ToList());
  223. }
  224. public static SFSObject WrapChestAwardArg(long chestID)
  225. {
  226. SFSObject parameter = new SFSObject();
  227. parameter.PutInt(SFSLabel.CommandID, PlazaRoomReq.GetChestAward.GetHashCode());
  228. parameter.PutLong(gd_chest.ID, chestID);
  229. return parameter;
  230. }
  231. public void GetChestAward(long chestID)
  232. {
  233. SFSObject parameter = WrapChestAwardArg(chestID);
  234. SFSEventManager.GardenSmartFox.AddRequest(parameter, RequestType.Immediate);
  235. }
  236. public void GetAllChestData(int databaseRoomID)
  237. {
  238. SFSObject parameter = new SFSObject();
  239. parameter.PutInt(SFSLabel.CommandID, PlazaRoomReq.GetAllChestData.GetHashCode());
  240. parameter.PutInt(SFSLabel.DatabaseRoomID, databaseRoomID);
  241. SFSEventManager.GardenSmartFox.AddRequest(parameter, RequestType.Immediate);
  242. }
  243. public void CheckChestRefund(List<int> databaseRoomIDs)
  244. {
  245. SFSManager.GardenSmartFox.ExecuteAfterCheckConection
  246. (
  247. () =>
  248. {
  249. SFSObject parameter = new SFSObject();
  250. parameter.PutInt(SFSLabel.CommandID, PlazaRoomReq.CheckChestRefund.GetHashCode());
  251. parameter.PutLong(SFSLabel.UserID, long.Parse(HttpManager.SerialNumber));
  252. parameter.PutIntArray(SFSLabel.DataArray, databaseRoomIDs.ToArray());
  253. SFSEventManager.GardenSmartFox.AddRequest(parameter, RequestType.Immediate);
  254. }
  255. );
  256. }
  257. public void OnReceiveChestAward(BaseEvent baseEvent)
  258. {
  259. ISFSObject arg = baseEvent.Params[SFSLabel.DefaultParams] as ISFSObject;
  260. int award = arg.GetInt(SFSLabel.Data);
  261. long chestID = arg.GetLong(SFSLabel.ChestID);
  262. ChestManager.ReceiveChestAward(award, chestID);
  263. }
  264. public void OnReceiveAllChestData(BaseEvent baseEvent)
  265. {
  266. ISFSArray array = (baseEvent.Params[SFSLabel.DefaultParams] as ISFSObject).GetSFSArray(SFSLabel.DataArray);
  267. List<ChestData> chestDatas = new List<ChestData>();
  268. for (int i = 0; i < array.Size(); i++)
  269. {
  270. chestDatas.Add(new ChestData(array.GetSFSObject(i)));
  271. }
  272. ChestManager.ReceiveAllChestData(chestDatas);
  273. }
  274. public void OnReceiveChestRefund(BaseEvent baseEvent)
  275. {
  276. ISFSObject arg = baseEvent.Params[SFSLabel.DefaultParams] as ISFSObject;
  277. int refund = arg.GetInt(SFSLabel.Data);
  278. List<int> databaseRoomIDs = arg.GetIntArray(SFSLabel.DataArray).ToList();
  279. ChestManager.ReceiveChestRefund(refund, databaseRoomIDs);
  280. }
  281. public void CreateRobot(BaseEvent baseEvent)
  282. {
  283. SFSObject arg = baseEvent.Params[SFSLabel.DefaultParams] as SFSObject;
  284. int currentRobotAmt = arg.GetInt(SFSLabel.Data);
  285. long robotConfigID = arg.GetLong(SFSLabel.UserID);
  286. bool random = arg.GetBool(SFSLabel.Random);
  287. string nickname = arg.GetUtfString(SFSLabel.Nickname);
  288. List<string> dressdatas = arg.GetUtfStringArray(SFSLabel.DataArray).ToList();
  289. RobotManager.AddRobot(currentRobotAmt, robotConfigID, random, nickname, dressdatas);
  290. }
  291. public void CheckDefaultChestStatus(int databaseRoomID)
  292. {
  293. SFSObject parameter = new SFSObject();
  294. parameter.PutInt(SFSLabel.CommandID, PlazaRoomReq.CheckDefaultChest.GetHashCode());
  295. parameter.PutInt(SFSLabel.DatabaseRoomID, databaseRoomID);
  296. SFSEventManager.GardenSmartFox.AddRequest(parameter, RequestType.Immediate);
  297. }
  298. public void OnActivateDefaultChest(BaseEvent baseEvent)
  299. {
  300. ISFSObject arg = baseEvent.Params[SFSLabel.DefaultParams] as ISFSObject;
  301. DateTime dateTime = DateUtil.GetTimeFromSeconds(arg.GetLong(SFSLabel.Data).ToString());
  302. //Debug.Log(dateTime);
  303. ChestManager.ActivateSystemChest(dateTime);
  304. }
  305. public void OnReactivateDefaultChest(BaseEvent baseEvent)
  306. {
  307. ISFSObject arg = baseEvent.Params[SFSLabel.DefaultParams] as ISFSObject;
  308. DateTime dateTime = DateUtil.GetTimeFromSeconds(arg.GetLong(SFSLabel.Data).ToString());
  309. //Debug.Log(dateTime);
  310. ChestManager.ReactivateSystemChest(dateTime);
  311. }
  312. public void OnDeactivateDefaultChest(BaseEvent baseEvent)
  313. {
  314. ISFSObject arg = baseEvent.Params[SFSLabel.DefaultParams] as ISFSObject;
  315. long pasttime = arg.GetLong(SFSLabel.Data);
  316. //Debug.LogWarning(pasttime);
  317. ChestManager.DeactivateSystemChest(pasttime);
  318. }
  319. public void OnReceiveRoomData(BaseEvent baseEvent)
  320. {
  321. ISFSArray array = (baseEvent.Params[SFSLabel.DefaultParams] as ISFSObject).GetSFSArray(SFSLabel.DataArray);
  322. //for (int i = 0; i < array.Size(); i++)
  323. //{
  324. // Debug.LogWarning(array.GetSFSObject(i).GetDump());
  325. //}
  326. PlazaRoomManager.OnReceiveNormalRoomData(array);
  327. }
  328. public void OnReceiveCustomRoomData(BaseEvent baseEvent)
  329. {
  330. ISFSArray array = (baseEvent.Params[SFSLabel.DefaultParams] as ISFSObject).GetSFSArray(SFSLabel.DataArray);
  331. //for (int i = 0; i < array.Size(); i++)
  332. //{
  333. // Debug.LogWarning(array.GetSFSObject(i).GetDump());
  334. //}
  335. PlazaRoomManager.OnReceiveCustomRoomData(array);
  336. }
  337. public void OnReceiveRoomFullStatus(BaseEvent baseEvent)
  338. {
  339. ISFSObject obj = baseEvent.Params[SFSLabel.DefaultParams] as ISFSObject;
  340. int[] idArray = obj.GetIntArray(SFSLabel.Data);
  341. bool[] statusArray = obj.GetBoolArray(SFSLabel.DataArray);
  342. PlazaRoomManager.OnReceiveRoomFullStatus(idArray.ToList(), statusArray.ToList());
  343. }
  344. public void OnCreateRoomError(BaseEvent baseEvent)
  345. {
  346. PlazaRoomManager.OnCreateRoomError();
  347. }
  348. public void OnCreateRoomSucceed(BaseEvent baseEvent)
  349. {
  350. RoomData roomData = new RoomData((baseEvent.Params[SFSLabel.DefaultParams] as ISFSObject));
  351. PlazaRoomManager.OnCreateRoomSucceed(roomData);
  352. }
  353. public void OnJoinPlazaRoomSucceed(BaseEvent baseEvent)
  354. {
  355. ISFSObject arg = baseEvent.Params[SFSLabel.DefaultParams] as ISFSObject;
  356. int roomID = arg.GetInt(SFSLabel.RoomID);
  357. DateTime joinedTime = DateUtil.GetTimeFromSeconds(arg.GetLong(SFSLabel.DateTime).ToString());
  358. Room room = new SFSRoom(roomID, Random.Range(1f,100f).ToString());
  359. CurrentPlazaRoom = room;
  360. SFSEventManager.GardenSmartFox.PlazaRoomController.OnJoinPlazaRoom(room, joinedTime);
  361. }
  362. public void OnJoinPlazaRoomError(BaseEvent baseEvent)
  363. {
  364. int errorID = (baseEvent.Params[SFSLabel.DefaultParams] as ISFSObject).GetInt(SFSLabel.Error);
  365. JoinRoomResult joinRoomRequest = (JoinRoomResult) errorID;
  366. SFSEventManager.GardenSmartFox.PlazaRoomController.OnJoinPlazaRoomError(joinRoomRequest);
  367. }
  368. public void OnLeaveRoom(BaseEvent baseEvent)
  369. {
  370. SFSEventManager.GardenSmartFox.PlazaRoomController.OnConectionLost(baseEvent);
  371. }
  372. public void OnOtherExitRoom(BaseEvent baseEvent)
  373. {
  374. ISFSObject arg = (ISFSObject)baseEvent.Params[SFSLabel.DefaultParams];
  375. int userID = arg.GetInt(SFSLabel.UserID);
  376. if (userID != SFSManager.GardenSmartFox.User.Id)
  377. {
  378. //Debug.LogWarning($"User : {userID} left room");
  379. SFSEventManager.GardenSmartFox.PlazaRoomController.OnUserExitPlazaRoom(userID);
  380. }
  381. }
  382. public void OnOtherEnterRoom(BaseEvent baseEvent)
  383. {
  384. ISFSObject arg = (ISFSObject) baseEvent.Params[SFSLabel.DefaultParams];
  385. int userID = arg.GetInt(SFSLabel.UserID);
  386. if (userID != SFSManager.GardenSmartFox.User.Id)
  387. {
  388. //Debug.LogWarning($"User : {userID} joined room");
  389. SFSEventManager.GardenSmartFox.PlazaRoomController.OnUserEnterPlazaRoom(userID);
  390. }
  391. }
  392. public static SFSObject WrapInfoRequest(int roomID, int targetUserID, SFSObject parameter)
  393. {
  394. SFSObject obj = new SFSObject();
  395. obj.PutInt(SFSLabel.CommandID, PlazaRoomReq.SendInfo.GetHashCode());
  396. obj.PutInt(SFSLabel.RoomID, roomID);
  397. obj.PutInt(SFSLabel.TargetUserID, targetUserID);
  398. obj.PutSFSObject(SFSLabel.Data, parameter);
  399. return obj;
  400. }
  401. }