webim.js 372 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789379037913792379337943795379637973798379938003801380238033804380538063807380838093810381138123813381438153816381738183819382038213822382338243825382638273828382938303831383238333834383538363837383838393840384138423843384438453846384738483849385038513852385338543855385638573858385938603861386238633864386538663867386838693870387138723873387438753876387738783879388038813882388338843885388638873888388938903891389238933894389538963897389838993900390139023903390439053906390739083909391039113912391339143915391639173918391939203921392239233924392539263927392839293930393139323933393439353936393739383939394039413942394339443945394639473948394939503951395239533954395539563957395839593960396139623963396439653966396739683969397039713972397339743975397639773978397939803981398239833984398539863987398839893990399139923993399439953996399739983999400040014002400340044005400640074008400940104011401240134014401540164017401840194020402140224023402440254026402740284029403040314032403340344035403640374038403940404041404240434044404540464047404840494050405140524053405440554056405740584059406040614062406340644065406640674068406940704071407240734074407540764077407840794080408140824083408440854086408740884089409040914092409340944095409640974098409941004101410241034104410541064107410841094110411141124113411441154116411741184119412041214122412341244125412641274128412941304131413241334134413541364137413841394140414141424143414441454146414741484149415041514152415341544155415641574158415941604161416241634164416541664167416841694170417141724173417441754176417741784179418041814182418341844185418641874188418941904191419241934194419541964197419841994200420142024203420442054206420742084209421042114212421342144215421642174218421942204221422242234224422542264227422842294230423142324233423442354236423742384239424042414242424342444245424642474248424942504251425242534254425542564257425842594260426142624263426442654266426742684269427042714272427342744275427642774278427942804281428242834284428542864287428842894290429142924293429442954296429742984299430043014302430343044305430643074308430943104311431243134314431543164317431843194320432143224323432443254326432743284329433043314332433343344335433643374338433943404341434243434344434543464347434843494350435143524353435443554356435743584359436043614362436343644365436643674368436943704371437243734374437543764377437843794380438143824383438443854386438743884389439043914392439343944395439643974398439944004401440244034404440544064407440844094410441144124413441444154416441744184419442044214422442344244425442644274428442944304431443244334434443544364437443844394440444144424443444444454446444744484449445044514452445344544455445644574458445944604461446244634464446544664467446844694470447144724473447444754476447744784479448044814482448344844485448644874488448944904491449244934494449544964497449844994500450145024503450445054506450745084509451045114512451345144515451645174518451945204521452245234524452545264527452845294530453145324533453445354536453745384539454045414542454345444545454645474548454945504551455245534554455545564557455845594560456145624563456445654566456745684569457045714572457345744575457645774578457945804581458245834584458545864587458845894590459145924593459445954596459745984599460046014602460346044605460646074608460946104611461246134614461546164617461846194620462146224623462446254626462746284629463046314632463346344635463646374638463946404641464246434644464546464647464846494650465146524653465446554656465746584659466046614662466346644665466646674668466946704671467246734674467546764677467846794680468146824683468446854686468746884689469046914692469346944695469646974698469947004701470247034704470547064707470847094710471147124713471447154716471747184719472047214722472347244725472647274728472947304731473247334734473547364737473847394740474147424743474447454746474747484749475047514752475347544755475647574758475947604761476247634764476547664767476847694770477147724773477447754776477747784779478047814782478347844785478647874788478947904791479247934794479547964797479847994800480148024803480448054806480748084809481048114812481348144815481648174818481948204821482248234824482548264827482848294830483148324833483448354836483748384839484048414842484348444845484648474848484948504851485248534854485548564857485848594860486148624863486448654866486748684869487048714872487348744875487648774878487948804881488248834884488548864887488848894890489148924893489448954896489748984899490049014902490349044905490649074908490949104911491249134914491549164917491849194920492149224923492449254926492749284929493049314932493349344935493649374938493949404941494249434944494549464947494849494950495149524953495449554956495749584959496049614962496349644965496649674968496949704971497249734974497549764977497849794980498149824983498449854986498749884989499049914992499349944995499649974998499950005001500250035004500550065007500850095010501150125013501450155016501750185019502050215022502350245025502650275028502950305031503250335034503550365037503850395040504150425043504450455046504750485049505050515052505350545055505650575058505950605061506250635064506550665067506850695070507150725073507450755076507750785079508050815082508350845085508650875088508950905091509250935094509550965097509850995100510151025103510451055106510751085109511051115112511351145115511651175118511951205121512251235124512551265127512851295130513151325133513451355136513751385139514051415142514351445145514651475148514951505151515251535154515551565157515851595160516151625163516451655166516751685169517051715172517351745175517651775178517951805181518251835184518551865187518851895190519151925193519451955196519751985199520052015202520352045205520652075208520952105211521252135214521552165217521852195220522152225223522452255226522752285229523052315232523352345235523652375238523952405241524252435244524552465247524852495250525152525253525452555256525752585259526052615262526352645265526652675268526952705271527252735274527552765277527852795280528152825283528452855286528752885289529052915292529352945295529652975298529953005301
  1. /* webim javascript SDK
  2. * VER 1.6.0
  3. */
  4. /* webim API definitions
  5. */
  6. var webim = { // namespace object webim
  7. /* function init
  8. * sdk登录
  9. * params:
  10. * loginInfo - Object, 登录身份相关参数集合,详见下面
  11. * {
  12. * sdkAppID - String, 用户标识接入SDK的应用ID,必填
  13. * accountType - int, 账号类型,必填
  14. * identifier - String, 用户帐号,必须是字符串类型,必填
  15. * identifierNick - String, 用户昵称,选填
  16. * userSig - String, 鉴权Token,必须是字符串类型,必填
  17. * }
  18. * listeners - Object, 事件回调函数集合, 详见下面
  19. * {
  20. * onConnNotify - function(connInfo), 用于收到连接状态相关通知的回调函数,目前未使用
  21. * jsonpCallback -function(rspData),//IE9(含)以下浏览器用到的jsonp回调函数
  22. * onMsgNotify - function(newMsgList), 用于收到消息通知的回调函数,
  23. * newMsgList为新消息数组,格式为[Msg对象]
  24. * 使用方有两种处理回调: 1)处理newMsgList中的增量消息,2)直接访问webim.MsgStore获取最新的消息
  25. * onGroupInfoChangeNotify - function(groupInfo), 用于监听群组资料变更的回调函数,
  26. * groupInfo为新的群组资料信息
  27. * onGroupSystemNotifys - Object, 用于监听(多终端同步)群系统消息的回调函数对象
  28. *
  29. * }
  30. * options - Object, 其它选项, 目前未使用
  31. * return:
  32. * (无)
  33. */
  34. login: function (loginInfo, listeners, options) { },
  35. /* function syncMsgs
  36. * 拉取最新C2C消息
  37. * 一般不需要使用方直接调用, SDK底层会自动同步最新消息并通知使用方, 一种有用的调用场景是用户手动触发刷新消息
  38. * params:
  39. * cbOk - function(msgList)类型, 当同步消息成功时的回调函数, msgList为新消息数组,格式为[Msg对象],
  40. * 如果此参数为null或undefined则同步消息成功后会像自动同步那样回调cbNotify
  41. * cbErr - function(err)类型, 当同步消息失败时的回调函数, err为错误对象
  42. * return:
  43. * (无)
  44. */
  45. syncMsgs: function (cbOk, cbErr) { },
  46. /* function getC2CHistoryMsgs
  47. * 拉取C2C漫游消息
  48. * params:
  49. * options - 请求参数
  50. * cbOk - function(msgList)类型, 成功时的回调函数, msgList为消息数组,格式为[Msg对象],
  51. * cbErr - function(err)类型, 失败时回调函数, err为错误对象
  52. * return:
  53. * (无)
  54. */
  55. getC2CHistoryMsgs: function (options, cbOk, cbErr) { },
  56. /* function syncGroupMsgs
  57. * 拉取群漫游消息
  58. * params:
  59. * options - 请求参数
  60. * cbOk - function(msgList)类型, 成功时的回调函数, msgList为消息数组,格式为[Msg对象],
  61. * cbErr - function(err)类型, 失败时回调函数, err为错误对象
  62. * return:
  63. * (无)
  64. */
  65. syncGroupMsgs: function (options, cbOk, cbErr) { },
  66. /* function sendMsg
  67. * 发送一条消息
  68. * params:
  69. * msg - webim.Msg类型, 要发送的消息对象
  70. * cbOk - function()类型, 当发送消息成功时的回调函数
  71. * cbErr - function(err)类型, 当发送消息失败时的回调函数, err为错误对象
  72. * return:
  73. * (无)
  74. */
  75. sendMsg: function (msg, cbOk, cbErr) { },
  76. /* function logout
  77. * sdk登出
  78. * params:
  79. * cbOk - function()类型, 成功时回调函数
  80. * cbErr - function(err)类型, 失败时回调函数, err为错误对象
  81. * return:
  82. * (无)
  83. */
  84. logout: function (cbOk, cbErr) { },
  85. /* function setAutoRead
  86. * 设置会话自动已读上报标志
  87. * params:
  88. * selSess - webim.Session类型, 当前会话
  89. * isOn - boolean, 将selSess的自动已读消息标志改为isOn,同时是否上报当前会话已读消息
  90. * isResetAll - boolean,是否重置所有会话的自动已读标志
  91. * return:
  92. * (无)
  93. */
  94. setAutoRead: function (selSess, isOn, isResetAll) { },
  95. /* function getProfilePortrait
  96. * 拉取资料(搜索用户)
  97. * params:
  98. * cbOk - function()类型, 成功时回调函数
  99. * cbErr - function(err)类型, 失败时回调函数, err为错误对象
  100. * return:
  101. * (无)
  102. */
  103. getProfilePortrait: function (options, cbOk, cbErr) { },
  104. /* function setProfilePortrait
  105. * 设置个人资料
  106. * params:
  107. * cbOk - function()类型, 成功时回调函数
  108. * cbErr - function(err)类型, 失败时回调函数, err为错误对象
  109. * return:
  110. * (无)
  111. */
  112. setProfilePortrait: function (options, cbOk, cbErr) { },
  113. /* function applyAddFriend
  114. * 申请添加好友
  115. * params:
  116. * cbOk - function()类型, 成功时回调函数
  117. * cbErr - function(err)类型, 失败时回调函数, err为错误对象
  118. * return:
  119. * (无)
  120. */
  121. applyAddFriend: function (options, cbOk, cbErr) { },
  122. /* function getPendency
  123. * 拉取好友申请
  124. * params:
  125. * cbOk - function()类型, 成功时回调函数
  126. * cbErr - function(err)类型, 失败时回调函数, err为错误对象
  127. * return:
  128. * (无)
  129. */
  130. getPendency: function (options, cbOk, cbErr) { },
  131. /* function deletePendency
  132. * 删除好友申请
  133. * params:
  134. * cbOk - function()类型, 成功时回调函数
  135. * cbErr - function(err)类型, 失败时回调函数, err为错误对象
  136. * return:
  137. * (无)
  138. */
  139. deletePendency: function (options, cbOk, cbErr) { },
  140. /* function responseFriend
  141. * 响应好友申请
  142. * params:
  143. * cbOk - function()类型, 成功时回调函数
  144. * cbErr - function(err)类型, 失败时回调函数, err为错误对象
  145. * return:
  146. * (无)
  147. */
  148. responseFriend: function (options, cbOk, cbErr) { },
  149. /* function getAllFriend
  150. * 拉取我的好友
  151. * params:
  152. * cbOk - function()类型, 成功时回调函数
  153. * cbErr - function(err)类型, 失败时回调函数, err为错误对象
  154. * return:
  155. * (无)
  156. */
  157. getAllFriend: function (options, cbOk, cbErr) { },
  158. /* function deleteFriend
  159. * 删除好友
  160. * params:
  161. * cbOk - function()类型, 成功时回调函数
  162. * cbErr - function(err)类型, 失败时回调函数, err为错误对象
  163. * return:
  164. * (无)
  165. */
  166. deleteFriend: function (options, cbOk, cbErr) { },
  167. /* function addBlackList
  168. * 增加黑名单
  169. * params:
  170. * cbOk - function()类型, 成功时回调函数
  171. * cbErr - function(err)类型, 失败时回调函数, err为错误对象
  172. * return:
  173. * (无)
  174. */
  175. addBlackList: function (options, cbOk, cbErr) { },
  176. /* function getBlackList
  177. * 删除黑名单
  178. * params:
  179. * cbOk - function()类型, 成功时回调函数
  180. * cbErr - function(err)类型, 失败时回调函数, err为错误对象
  181. * return:
  182. * (无)
  183. */
  184. getBlackList: function (options, cbOk, cbErr) { },
  185. /* function deleteBlackList
  186. * 我的黑名单
  187. * params:
  188. * cbOk - function()类型, 成功时回调函数
  189. * cbErr - function(err)类型, 失败时回调函数, err为错误对象
  190. * return:
  191. * (无)
  192. */
  193. deleteBlackList: function (options, cbOk, cbErr) { },
  194. /* function uploadPic
  195. * 上传图片
  196. * params:
  197. * options - 请求参数,详见api文档
  198. * cbOk - function()类型, 成功时回调函数
  199. * cbErr - function(err)类型, 失败时回调函数, err为错误对象
  200. * return:
  201. * (无)
  202. */
  203. uploadPic: function (options, cbOk, cbErr) { },
  204. /* function createGroup
  205. * 创建群
  206. * params:
  207. * options - 请求参数,详见api文档
  208. * cbOk - function()类型, 成功时回调函数
  209. * cbErr - function(err)类型, 失败时回调函数, err为错误对象
  210. * return:
  211. * (无)
  212. */
  213. createGroup: function (options, cbOk, cbErr) { },
  214. /* function applyJoinGroup
  215. * 申请加群
  216. * params:
  217. * options - 请求参数,详见api文档
  218. * cbOk - function()类型, 成功时回调函数
  219. * cbErr - function(err)类型, 失败时回调函数, err为错误对象
  220. * return:
  221. * (无)
  222. */
  223. applyJoinGroup: function (options, cbOk, cbErr) { },
  224. /* function handleApplyJoinGroup
  225. * 处理申请加群(同意或拒绝)
  226. * params:
  227. * options - 请求参数,详见api文档
  228. * cbOk - function()类型, 成功时回调函数
  229. * cbErr - function(err)类型, 失败时回调函数, err为错误对象
  230. * return:
  231. * (无)
  232. */
  233. handleApplyJoinGroup: function (options, cbOk, cbErr) { },
  234. /* function deleteApplyJoinGroupPendency
  235. * 删除加群申请
  236. * params:
  237. * options - 请求参数,详见api文档
  238. * cbOk - function()类型, 成功时回调函数
  239. * cbErr - function(err)类型, 失败时回调函数, err为错误对象
  240. * return:
  241. * (无)
  242. */
  243. deleteApplyJoinGroupPendency: function (options, cbOk, cbErr) { },
  244. /* function quitGroup
  245. * 主动退群
  246. * params:
  247. * options - 请求参数,详见api文档
  248. * cbOk - function()类型, 成功时回调函数
  249. * cbErr - function(err)类型, 失败时回调函数, err为错误对象
  250. * return:
  251. * (无)
  252. */
  253. quitGroup: function (options, cbOk, cbErr) { },
  254. /* function getGroupPublicInfo
  255. * 读取群公开资料-高级接口
  256. * params:
  257. * options - 请求参数,详见api文档
  258. * cbOk - function()类型, 成功时回调函数
  259. * cbErr - function(err)类型, 失败时回调函数, err为错误对象
  260. * return:
  261. * (无)
  262. */
  263. getGroupPublicInfo: function (options, cbOk, cbErr) { },
  264. /* function getGroupInfo
  265. * 读取群详细资料-高级接口
  266. * params:
  267. * options - 请求参数,详见api文档
  268. * cbOk - function()类型, 成功时回调函数
  269. * cbErr - function(err)类型, 失败时回调函数, err为错误对象
  270. * return:
  271. * (无)
  272. */
  273. getGroupInfo: function (options, cbOk, cbErr) { },
  274. /* function modifyGroupBaseInfo
  275. * 修改群基本资料
  276. * params:
  277. * options - 请求参数,详见api文档
  278. * cbOk - function()类型, 成功时回调函数
  279. * cbErr - function(err)类型, 失败时回调函数, err为错误对象
  280. * return:
  281. * (无)
  282. */
  283. modifyGroupBaseInfo: function (options, cbOk, cbErr) { },
  284. /* function destroyGroup
  285. * 解散群
  286. * params:
  287. * options - 请求参数,详见api文档
  288. * cbOk - function()类型, 成功时回调函数
  289. * cbErr - function(err)类型, 失败时回调函数, err为错误对象
  290. * return:
  291. * (无)
  292. */
  293. destroyGroup: function (options, cbOk, cbErr) { },
  294. /* function getJoinedGroupListHigh
  295. * 获取我的群组-高级接口
  296. * params:
  297. * options - 请求参数,详见api文档
  298. * cbOk - function()类型, 成功时回调函数
  299. * cbErr - function(err)类型, 失败时回调函数, err为错误对象
  300. * return:
  301. * (无)
  302. */
  303. getJoinedGroupListHigh: function (options, cbOk, cbErr) { },
  304. /* function getGroupMemberInfo
  305. * 获取群组成员列表
  306. * params:
  307. * options - 请求参数,详见api文档
  308. * cbOk - function()类型, 成功时回调函数
  309. * cbErr - function(err)类型, 失败时回调函数, err为错误对象
  310. * return:
  311. * (无)
  312. */
  313. getGroupMemberInfo: function (options, cbOk, cbErr) { },
  314. /* function addGroupMember
  315. * 邀请好友加群
  316. * params:
  317. * options - 请求参数,详见api文档
  318. * cbOk - function()类型, 成功时回调函数
  319. * cbErr - function(err)类型, 失败时回调函数, err为错误对象
  320. * return:
  321. * (无)
  322. */
  323. addGroupMember: function (options, cbOk, cbErr) { },
  324. /* function modifyGroupMember
  325. * 修改群成员资料(角色或者群消息提类型示)
  326. * params:
  327. * options - 请求参数,详见api文档
  328. * cbOk - function()类型, 成功时回调函数
  329. * cbErr - function(err)类型, 失败时回调函数, err为错误对象
  330. * return:
  331. * (无)
  332. */
  333. modifyGroupMember: function (options, cbOk, cbErr) { },
  334. /* function forbidSendMsg
  335. * 设置群成员禁言时间
  336. * params:
  337. * options - 请求参数,详见api文档
  338. * cbOk - function()类型, 成功时回调函数
  339. * cbErr - function(err)类型, 失败时回调函数, err为错误对象
  340. * return:
  341. * (无)
  342. */
  343. forbidSendMsg: function (options, cbOk, cbErr) { },
  344. /* function deleteGroupMember
  345. * 删除群成员
  346. * params:
  347. * options - 请求参数,详见api文档
  348. * cbOk - function()类型, 成功时回调函数
  349. * cbErr - function(err)类型, 失败时回调函数, err为错误对象
  350. * return:
  351. * (无)
  352. */
  353. deleteGroupMember: function (options, cbOk, cbErr) { },
  354. /* function sendCustomGroupNotify
  355. * 发送自定义群通知
  356. * params:
  357. * options - 请求参数,详见api文档
  358. * cbOk - function()类型, 成功时回调函数
  359. * cbErr - function(err)类型, 失败时回调函数, err为错误对象
  360. * return:
  361. * (无)
  362. */
  363. sendCustomGroupNotify: function (options, cbOk, cbErr) { },
  364. /* class webim.Msg
  365. * 一条消息的描述类, 消息发送、接收的API中都会涉及此类型的对象
  366. * properties:
  367. * sess - Session object-ref, 消息所属的会话(e.g:我与好友A的C2C会话,我与群组G的GROUP会话)
  368. * isSend - Boolean, true表示是我发出消息, false表示是发给我的消息)
  369. * seq - Integer, 消息序列号, 用于判断消息是否同一条
  370. * random - Integer, 消息随机数,用于判断消息是否同一条
  371. * time - Integer, 消息时间戳, 为unix timestamp
  372. * fromAccount -String, 消息发送者帐号
  373. * subType -Integer, 消息子类型,c2c消息时,0-表示普通消息;群消息时,0-普通消息,1-点赞消息,2-提示消息
  374. * fromAccountNick -String, 消息发送者昵称
  375. * elems - Array of webim.Msg.Elem, 描述消息内容的元素列表
  376. * constructor:
  377. * Msg(sess, isSend, seq,random time,fromAccount) - 构造函数, 参数定义同上面properties中定义
  378. * methods:
  379. * addText(text) - 向elems中添加一个TEXT元素
  380. * addFace(face) - 向elems中添加一个FACE元素
  381. * toHtml() - 转成可展示的html String
  382. *addFace
  383. * sub-class webim.Msg.Elem
  384. * 消息中一个组成元素的描述类, 一条消息的内容被抽象描述为N个元素的有序列表
  385. * properties:
  386. * type - 元素类型, 目前有TEXT(文本)、FACE(表情)、IMAGE(图片)等
  387. * content- 元素内容体, 当TEXT时为String, 当PIC时为UrlString
  388. * constructor:
  389. * Elem(type, content) - 构造函数, 参数定义同上面properties中定义
  390. *
  391. * sub-class webim.Msg.Elem.TextElem
  392. * 文本
  393. * properties:
  394. * text - String 内容
  395. * constructor:
  396. * TextElem(text) - 构造函数, 参数定义同上面properties中定义
  397. *
  398. * sub-class webim.Msg.Elem.FaceElem
  399. * 表情
  400. * properties:
  401. * index - Integer 表情索引, 用户自定义
  402. * data - String 额外数据,用户自定义
  403. * constructor:
  404. * FaceElem(index,data) - 构造函数, 参数定义同上面properties中定义
  405. *
  406. *
  407. */
  408. Msg: function (sess, isSend, seq, random, time, fromAccount, subType, fromAccountNick) {/*Class constructor*/ },
  409. /* singleton object MsgStore
  410. * webim.MsgStore是消息数据的Model对象(参考MVC概念), 它提供接口访问当前存储的会话和消息数据
  411. * 下面说明下会话数据类型: Session
  412. *
  413. * class Session
  414. * 一个Session对象描述一个会话,会话可简单理解为最近会话列表的一个条目,它由两个字段唯一标识:
  415. * type - String, 会话类型(如"C2C", "GROUP", ...)
  416. * id - String, 会话ID(如C2C类型中为对方帐号,"C2C"时为好友ID,"GROUP"时为群ID)
  417. * properties:
  418. * (Session对象未对外暴露任何属性字段, 所有访问通过下面的getter方法进行)
  419. * methods:
  420. * type() - String, 返回会话类型,"C2C"表示与好友私聊,"GROUP"表示群聊
  421. * id() - String, 返回会话ID
  422. * name() - String, 返回会话标题(如C2C类型中为对方的昵称)
  423. * icon() - String, 返回会话图标(对C2C类型中为对方的头像URL)
  424. * unread() - Integer, 返回会话未读条数
  425. * time() - Integer, 返回会话最后活跃时间, 为unix timestamp
  426. * curMaxMsgSeq() - Integer, 返回会话最大消息序列号
  427. * msgCount() - Integer, 返回会话中所有消息条数
  428. * msg(index) - webim.Msg, 返回会话中第index条消息
  429. */
  430. MsgStore: {
  431. /* function sessMap
  432. * 获取所有会话
  433. * return:
  434. * 所有会话对象
  435. */
  436. sessMap: function () { return {/*Object*/ }; },
  437. /* function sessCount
  438. * 获取当前会话的个数
  439. * return:
  440. * Integer, 会话个数
  441. */
  442. sessCount: function () { return 0; },
  443. /* function sessByTypeId
  444. * 根据会话类型和会话ID取得相应会话
  445. * params:
  446. * type - String, 会话类型(如"C2C", "GROUP", ...)
  447. * id - String, 会话ID(如对方ID)
  448. * return:
  449. * Session, 会话对象(说明见上面)
  450. */
  451. sessByTypeId: function (type, id) { return {/*Session Object*/ }; },
  452. /* function delSessByTypeId
  453. * 根据会话类型和会话ID删除相应会话
  454. * params:
  455. * type - String, 会话类型(如"C2C", "GROUP", ...)
  456. * id - String, 会话ID(如对方ID)
  457. * return:
  458. * Boolean, 布尔类型
  459. */
  460. delSessByTypeId: function (type, id) { return true; },
  461. /* function resetCookieAndSyncFlag
  462. * 重置上一次读取新c2c消息Cookie和是否继续拉取标记
  463. * return:
  464. *
  465. */
  466. resetCookieAndSyncFlag: function () { }
  467. }
  468. };
  469. /* webim API implementation
  470. */
  471. (function (webim) {
  472. //sdk版本
  473. var SDK = {
  474. 'VERSION': '1.6.0',//sdk版本号
  475. 'APPID': '537047540'//web im sdk 版本 APPID
  476. };
  477. //是否启用正式环境,默认启用
  478. var isAccessFormaEnvironment = true;
  479. //是否直接透传tinyid和a2
  480. var isUseTinyid = true;
  481. //后台接口主机
  482. var SRV_HOST = {
  483. 'FORMAL': {
  484. 'COMMON': 'https://webim.tim.qq.com',
  485. 'PIC': 'https://pic.tim.qq.com',
  486. 'BIG_GROUP': 'https://webapi.tim.qq.com'
  487. },
  488. 'TEST': {
  489. 'COMMON': 'https://test.tim.qq.com',
  490. 'PIC': 'https://pic.tim.qq.com',
  491. 'BIG_GROUP': 'https://test.tim.qq.com'
  492. }
  493. };
  494. var BROWSER_INFO = {};//浏览器版本信息
  495. //是否为ie9(含)以下
  496. var lowerBR = false;
  497. //服务名称
  498. var SRV_NAME = {
  499. 'OPEN_IM': 'openim',//私聊(拉取未读c2c消息,长轮询,c2c消息已读上报等)服务名
  500. 'GROUP': 'group_open_http_svc',//群组管理(拉取群消息,创建群,群成员管理,群消息已读上报等)服务名
  501. 'FRIEND': 'sns',//关系链管理(好友管理,黑名单管理等)服务名
  502. 'PROFILE': 'profile',//资料管理(查询,设置个人资料等)服务名
  503. 'PIC': 'openpic',//图片(上传图片)服务名
  504. 'BIG_GROUP': 'group_open_http_noauth_svc',//直播大群 群组管理(申请加群)服务名
  505. 'BIG_GROUP_LONG_POLLING': 'group_open_long_polling_http_noauth_svc',//直播大群 长轮询(拉取消息等)服务名
  506. 'IM_OPEN_STAT': 'imopenstat'//质量上报,统计接口错误率
  507. };
  508. //不同服务对应的版本号
  509. var SRV_NAME_VER = {
  510. 'openim': 'v4',
  511. 'group_open_http_svc': 'v3',
  512. 'sns': 'v3',
  513. 'profile': 'v3',
  514. 'openpic': 'v4',
  515. 'group_open_http_noauth_svc': 'v1',
  516. 'group_open_long_polling_http_noauth_svc': 'v1',
  517. 'imopenstat': 'v4'
  518. };
  519. //不同的命令名对应的上报类型ID
  520. var CMD_EVENT_ID_MAP = {
  521. 'login': 1,//登录
  522. 'pic_up': 3,//上传图片
  523. 'apply_join_group': 9,//申请加入群组
  524. 'create_group': 10,//创建群组
  525. 'longpolling': 18,//普通长轮询
  526. 'send_group_msg': 19,//群聊
  527. 'sendmsg': 20//私聊
  528. };
  529. //聊天类型
  530. var SESSION_TYPE = {
  531. 'C2C': 'C2C',//私聊
  532. 'GROUP': 'GROUP'//群聊
  533. };
  534. //消息最大长度(字节)
  535. var MSG_MAX_LENGTH = {
  536. 'C2C': 12000,//私聊消息
  537. 'GROUP': 8898//群聊
  538. };
  539. //后台接口返回类型
  540. var ACTION_STATUS = {
  541. 'OK': 'OK',//成功
  542. 'FAIL': 'FAIL'//失败
  543. };
  544. var ERROR_CODE_CUSTOM = 99999;//自定义后台接口返回错误码
  545. //消息元素类型
  546. var MSG_ELEMENT_TYPE = {
  547. 'TEXT': 'TIMTextElem',//文本
  548. 'FACE': 'TIMFaceElem',//表情
  549. 'IMAGE': 'TIMImageElem',//图片
  550. 'CUSTOM': 'TIMCustomElem',//自定义
  551. 'SOUND': 'TIMSoundElem',//语音,只支持显示
  552. 'FILE': 'TIMFileElem',//文件,只支持显示
  553. 'LOCATION': 'TIMLocationElem',//地理位置
  554. 'GROUP_TIP': 'TIMGroupTipElem'//群提示消息,只支持显示
  555. };
  556. //图片类型
  557. var IMAGE_TYPE = {
  558. 'ORIGIN': 1,//原图
  559. 'LARGE': 2,//缩略大图
  560. 'SMALL': 3//缩略小图
  561. };
  562. //下载文件配置
  563. var DOWNLOAD_FILE = {
  564. 'BUSSINESS_ID': '10001',//下载文件业务ID
  565. 'AUTH_KEY': '617574686b6579',//下载文件authkey
  566. 'SERVER_IP': '182.140.186.147'//下载文件服务器IP
  567. };
  568. //下载文件类型
  569. var DOWNLOAD_FILE_TYPE = {
  570. "SOUND": 2106,//语音
  571. "FILE": 2107//普通文件
  572. };
  573. //长轮询消息类型
  574. var LONG_POLLINNG_EVENT_TYPE = {
  575. "C2C": 1,//新的c2c消息通知
  576. "GROUP_COMMON": 3,//新的群普通消息
  577. "GROUP_TIP": 4,//新的群提示消息
  578. "GROUP_SYSTEM": 5,//新的群系统消息
  579. "GROUP_TIP2": 6,//新的群提示消息2
  580. "FRIEND_NOTICE": 7,//好友系统通知
  581. "PROFILE_NOTICE": 8//资料系统通知
  582. };
  583. //c2c消息子类型
  584. var C2C_MSG_SUB_TYPE = {
  585. "COMMON": 0//普通消息
  586. };
  587. //群消息子类型
  588. var GROUP_MSG_SUB_TYPE = {
  589. "COMMON": 0,//普通消息
  590. "LOVEMSG": 1,//点赞消息
  591. "TIP": 2,//提示消息
  592. "REDPACKET": 3//红包消息
  593. };
  594. //群消息优先级类型
  595. var GROUP_MSG_PRIORITY_TYPE = {
  596. "REDPACKET": 1,//红包消息
  597. "COMMON": 2,//普通消息
  598. "LOVEMSG": 3//点赞消息
  599. };
  600. //群提示消息类型
  601. var GROUP_TIP_TYPE = {
  602. "JOIN": 1,//加入群组
  603. "QUIT": 2,//退出群组
  604. "KICK": 3,//被踢出群组
  605. "SET_ADMIN": 4,//被设置为管理员
  606. "CANCEL_ADMIN": 5,//被取消管理员
  607. "MODIFY_GROUP_INFO": 6,//修改群资料
  608. "MODIFY_MEMBER_INFO": 7//修改群成员信息
  609. };
  610. //群提示消息-群资料变更类型
  611. var GROUP_TIP_MODIFY_GROUP_INFO_TYPE = {
  612. "FACE_URL": 1,//修改群头像URL
  613. "NAME": 2,//修改群名称
  614. "OWNER": 3,//修改群主
  615. "NOTIFICATION": 4,//修改群公告
  616. "INTRODUCTION": 5//修改群简介
  617. };
  618. //群系统消息类型
  619. var GROUP_SYSTEM_TYPE = {
  620. "JOIN_GROUP_REQUEST": 1,//申请加群请求(只有管理员会收到)
  621. "JOIN_GROUP_ACCEPT": 2,//申请加群被同意(只有申请人能够收到)
  622. "JOIN_GROUP_REFUSE": 3,//申请加群被拒绝(只有申请人能够收到)
  623. "KICK": 4,//被管理员踢出群(只有被踢者接收到)
  624. "DESTORY": 5,//群被解散(全员接收)
  625. "CREATE": 6,//创建群(创建者接收, 不展示)
  626. "INVITED_JOIN_GROUP_REQUEST": 7,//邀请加群(被邀请者接收)
  627. "QUIT": 8,//主动退群(主动退出者接收, 不展示)
  628. "SET_ADMIN": 9,//设置管理员(被设置者接收)
  629. "CANCEL_ADMIN": 10,//取消管理员(被取消者接收)
  630. "REVOKE": 11,//群已被回收(全员接收, 不展示)
  631. "CUSTOM": 255//用户自定义通知(默认全员接收)
  632. };
  633. //好友系统通知子类型
  634. var FRIEND_NOTICE_TYPE = {
  635. "FRIEND_ADD": 1,//好友表增加
  636. "FRIEND_DELETE": 2,//好友表删除
  637. "PENDENCY_ADD": 3,//未决增加
  638. "PENDENCY_DELETE": 4,//未决删除
  639. "BLACK_LIST_ADD": 5,//黑名单增加
  640. "BLACK_LIST_DELETE": 6,//黑名单删除
  641. "PENDENCY_REPORT": 7,//未决已读上报
  642. "FRIEND_UPDATE": 8//好友数据更新
  643. };
  644. //资料系统通知子类型
  645. var PROFILE_NOTICE_TYPE = {
  646. "PROFILE_MODIFY": 1//资料修改
  647. };
  648. //腾讯登录服务错误码(用于托管模式)
  649. var TLS_ERROR_CODE = {
  650. 'OK': 0,//成功
  651. 'SIGNATURE_EXPIRATION': 11//用户身份凭证过期
  652. };
  653. //长轮询连接状态
  654. var CONNECTION_STATUS = {
  655. 'INIT': -1,//初始化
  656. 'ON': 0,//连接正常
  657. 'RECONNECT': 1,//连接恢复正常
  658. 'OFF': 9999//连接已断开,可能是用户网络问题,或者长轮询接口报错引起的
  659. };
  660. var UPLOAD_PIC_BUSSINESS_TYPE = {//图片业务类型
  661. 'GROUP_MSG': 1,//私聊图片
  662. 'C2C_MSG': 2,//群聊图片
  663. 'USER_HEAD': 3,//用户头像
  664. 'GROUP_HEAD': 4//群头像
  665. };
  666. var FRIEND_WRITE_MSG_ACTION = {//好友输入消息状态
  667. 'ING': 14,//正在输入
  668. 'STOP': 15//停止输入
  669. };
  670. //ajax默认超时时间,单位:毫秒
  671. var ajaxDefaultTimeOut = 15000;
  672. //大群长轮询接口返回正常时,延时一定时间再发起下一次请求
  673. var OK_DELAY_TIME = 1000;
  674. //大群长轮询接口发生错误时,延时一定时间再发起下一次请求
  675. var ERROR_DELAY_TIME = 5000;
  676. //群提示消息最多显示人数
  677. var GROUP_TIP_MAX_USER_COUNT = 10;
  678. //长轮询连接状态
  679. var curLongPollingStatus = CONNECTION_STATUS.INIT;
  680. //当长轮询连接断开后,是否已经回调过
  681. var longPollingOffCallbackFlag = false;
  682. //当前长轮询返回错误次数
  683. var curLongPollingRetErrorCount = 0;
  684. //长轮询默认超时时间,单位:毫秒
  685. var longPollingDefaultTimeOut = 120000;
  686. //长轮询返回错误次数达到一定值后,发起新的长轮询请求间隔时间,单位:毫秒
  687. var longPollingIntervalTime = 5000;
  688. //没有新消息时,长轮询返回60008错误码是正常的
  689. var longPollingTimeOutErrorCode = 60008;
  690. //当前大群长轮询返回错误次数
  691. var curBigGroupLongPollingRetErrorCount = 0;
  692. //最大允许长轮询返回错误次数
  693. var LONG_POLLING_MAX_RET_ERROR_COUNT = 10;
  694. //ie7/8/9采用jsonp方法解决ajax跨域限制
  695. var jsonpRequestId = 0;//jsonp请求id
  696. //最新jsonp请求返回的json数据
  697. var jsonpLastRspData = null;
  698. //兼容ie7/8/9,jsonp回调函数
  699. var jsonpCallback = null;
  700. var uploadResultIframeId = 0;//用于上传图片的iframe id
  701. //错误码
  702. var ERROR = {};
  703. //当前登录用户
  704. var ctx = {
  705. sdkAppID: null,
  706. appIDAt3rd: null,
  707. accountType: null,
  708. identifier: null,
  709. tinyid: null,
  710. identifierNick: null,
  711. userSig: null,
  712. a2: null,
  713. contentType: 'json',
  714. apn: 1
  715. };
  716. var opt = {};
  717. var xmlHttpObjSeq = 0;//ajax请求id
  718. var xmlHttpObjMap = {};//发起的ajax请求
  719. var curSeq = 0;//消息seq
  720. var tempC2CMsgList = [];//新c2c消息临时缓存
  721. var C2CHitoryMsgKeyMap = {};//记录下一次拉取c2c漫游消息的msgkey
  722. var tempC2CHistoryMsgList = [];//漫游c2c消息临时缓存
  723. var maxApiReportItemCount = 20;//一次最多上报条数
  724. var apiReportItems = [];//暂存api接口质量上报数据
  725. //表情标识字符和索引映射关系对象,用户可以自定义
  726. var emotionDataIndexs = {
  727. "[惊讶]": 0,
  728. "[撇嘴]": 1,
  729. "[色]": 2,
  730. "[发呆]": 3,
  731. "[得意]": 4,
  732. "[流泪]": 5,
  733. "[害羞]": 6,
  734. "[闭嘴]": 7,
  735. "[睡]": 8,
  736. "[大哭]": 9,
  737. "[尴尬]": 10,
  738. "[发怒]": 11,
  739. "[调皮]": 12,
  740. "[龇牙]": 13,
  741. "[微笑]": 14,
  742. "[难过]": 15,
  743. "[酷]": 16,
  744. "[冷汗]": 17,
  745. "[抓狂]": 18,
  746. "[吐]": 19,
  747. "[偷笑]": 20,
  748. "[可爱]": 21,
  749. "[白眼]": 22,
  750. "[傲慢]": 23,
  751. "[饿]": 24,
  752. "[困]": 25,
  753. "[惊恐]": 26,
  754. "[流汗]": 27,
  755. "[憨笑]": 28,
  756. "[大兵]": 29,
  757. "[奋斗]": 30,
  758. "[咒骂]": 31,
  759. "[疑问]": 32,
  760. "[嘘]": 33,
  761. "[晕]": 34
  762. };
  763. //表情对象,用户可以自定义
  764. var emotions = {
  765. "0": ["[惊讶]", "data:image/gif;base64,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"],
  766. "1": ["[撇嘴]", "data:image/gif;base64,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"],
  767. "2": ["[色]", "data:image/gif;base64,R0lGODlhGAAYAPf/ALeCR+jl4t2cHP+5Esurhc6EDv/9sv+0h/nFPf79/P3RZ//SLtM1AOpFAP/2eNs6APyYaPK+OP/oTPenI+u5U+Xh3vCjC9aiatulQ//DHfTGW9eOEf/hQsYsAPncm//5mP3dQv/LJv/89v/7lf20EMOJPv/ePIIxAP2xDKhhEf/wXP/p3dnUz//+0P/EH//FH//9uP/mSP/5h/VNAP/cOv/1bf3gSs0xAP/y6v+1D/SoDP/UMf/7oP+6E//bOe5IAP/PK+VCAOOZHf/tV8RxGv/xX/tRAMB3J/+/GcqMS//AGv379///z+OXCvW+Jf/pTv7dPv/dPdqOC/jGMf/9yPzZPvFKAP/8m/zPNPbLNv/4e+umFvfGKt+TG+afEP/xYP/gVP/bSO28gP/PLPCsWfqxKPCmN+ymGtfRzP9UAP9gANfSzf/+x+Pf3PHbxPv6+ubCm/fr3t3Y1NzX0/NMAP/3eOpYAO24S7NvGv2ESuWmJu2+WPW5M+65N/PesN/a1rd7MvTy8eG/jP//18CXZ/yshf346+rn5L1/Lufe0Ml5Dcx4Cf/WNPvTPf3XOa5mD/GsEqxtJeKyUtKWM+auLvfBRfXBS/W3KenIkbmIU9iVFfDu7MyLIsJ8FPZRAvry5/vhpfzw1vzlr7FzK6hdCciQPpw7APrML+A+APfIW/jKX9mwbN+4b713FM6ACsWebdGVVPbYmdLFuPfKZ+rj3OGgIceCFsuJGvvLMNmYIcivlunNrr9UAP/uV9xVAOjXzOaqH/+XWcRuCf7hR/mzE97Z1eG7kuGAHOGPXf3MRdqkX/q2MvyzO/3HQvvQefzSh//WwvquMu21h/XGM/3URf68IfaZIPi3G/v48/7VYP3cP/atRruRZfi4Gv/rUPrIfvrYQ+1HAP/Lsf/ePv/JqN/JsaE9AK5wLPHAgP/DnuaqIPdOAPuvDNincv+7Fd1hANjAp8ZxB8ZzCcx3COCVEfv38v/8oN62ist9CO+8k//7n/2xC4czAL9iAP///////yH/C05FVFNDQVBFMi4wAwEAAAAh+QQFFAD/ACwAAAAAGAAYAAAI/wD/CRxIsKDBgwgTKhQhSlWlS3wszfIQSuFAUAgagQDBAYojLFP2+FmYysawGBKeSIjBgYYPXH0oIEyggVoabw3AfFExJEwaEw2qTZN00AM4T4Ua/AiipU4NpEqDvKDEqqChCNqM5Jnx48GHETK0zgj3IMQ1DIkIxsoSo1mDBze+wTBgT8HbG2WAZNiy6s3AO1UkqMjW4RmbFmwMjCCMwMSCF8QmBRioZ5yEIlquwGgxqAWMK1q+PHH8YsCtOQNrRRHsYIQBNkwSj3CgQoJjFwNsrRkowEeMXjVk6DMwl4eMGr1i+NCboxOagbkYcVDUr7r16/1chUBCotVzgRi40LboB8dNHH/o0cdxA6ffC3c6EO0WiEndjn788uvff6KfkhxSvCLHQJ9wcsp9/JhihxoM2mEOP/1k0IMFgMhyCEGCCLDAAv3I8w6DarwTT4Q9oPAIIX/4NVACpWgyRggbLGLdPPQo0QM7rgCwxoUGlbCBExm8IGQGSLiTQxMpZIJGGwkRgEcBXkAyAAk6NIHPObqwUIFFtBAAwCikpBAJANygUUwgFgmUwCZtyIEGC3NUwGOadBIUEAAh+QQFFAD/ACwDAAUAEgAQAAAIqgD/bTNCJ1qaBsz+JUtjZYKRBtb+SUwDDcKPdXRQ/UsjDkI4jAwk/jMCgc6PBkFCkjSJ8kY3ictQonrAAN0/ZzJpThD5zwwDBjeQMZFI5meHYyKjPPlHoYMYnv80dOgzTqQJiXUkUmkhMqvIF/9o8OQh0h5Psf8GQF3Ltq3bf8DeyuUZ7J8vXr+IuFUm7cAKHNiW+DPmbu4/Yf787epi+J8Qf7AaS4R1hGdAACH5BAUUAP8ALAMABQARABEAAAibAP9poJbGWwMwRf71CpPGRINq0/79A+epUIMfQbT8q1HxYpAXErUZyTPjx4MP/2SMnBHuQYhr/2I0a/DgxjcY/+wpoHmjDBCJ/1Rk6/CMTQuJI4YiiAJUopYrMJj8k/pPS5EnJiQybcqGalOgPv4NkWjvK1izaNOqXcu27dcBadNJrNd0X9OfbtUqOfPP3xG3QvzByvsPVhKgAQEAIfkEBRQA/wAsAwAFABEAEgAACJwA/20zQidamgbM/iVLY2WCkQbW/v1LAw3Cj3V0UE0UByEcRgYSjUCg86NBEJAiSZq80e3fMpOoHjBA988ZTJkTJP4zw4DBDWRMJJLp2eHYPxc6KXQQ0+Jf038aOkQYJ9GEzqtYs/aSyENnV500soodS7as2bNYe2AlsiofOYnYdPZAgdYsUolIdCap+89fCbRC/F0ohxZeu3s6AwIAOw=="],
  768. "3": ["[发呆]", "data:image/gif;base64,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"],
  769. "4": ["[得意]", "data:image/gif;base64,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"],
  770. "5": ["[流泪]", "data:image/gif;base64,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"],
  771. "6": ["[害羞]", "data:image/gif;base64,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"],
  772. "7": ["[闭嘴]", "data:image/gif;base64,R0lGODlhGAAYAPf/AOWmJunn5P21Ef+5E//+x/bIW+23SvbELcObarZlDe7FU//ePcqIJP/2dNW1Ov6zDf/+0eSXCtTFuvfamrx0FN7Z1f/oTf/7m/Hu6f/5h51wSNfRzP/KJfzjq//qUOOeE8yrhOnIkcidRN2cG//3eMV7E7aCR7uRZf/89vCxHv79/Ofe0NaOFP/hQsu5rtd7BP/9sr+EVPbetO/KPM6CC/zVOf/NKN++VP7sWahiEv/lSNzX0tnUz/CjC9OjJePEau2MBqdcCMyUKcKKPubi3+7HPP/7lfvNNP/VMf/RLbFtHF0jAMevmP66GNulQ6prJdmNC/a6NP/1baWCZfq2HM6AFNnLxv/bOf/XNNmYIu3PWPW3KfbpaeyyKdiSGvGrEv/GIPv6+v/wXf/wX7d7M9DAtuqkFtK3hf/DHciqVP/cOvXy8f37+fr59rBsKb1/Lt/CibBlD+3LR65mD//8oP/uV/3dQ//9uP/AGsuJGsmDGdWtLP/kR8t9CLp0K/Hp2v/FH/jGMfHQSNKsM/DUQuaiHLmIU+2iDf7gRNiWIM2pfP/sU9/TzPSoDMqsPfXx7d+5P/uvDd+iHfn388ykY/riSrBqF/XeTPbBJP/3e92RCcVqBPnEJdCcJPbSN/fhTt+lIL6EOrp0IvOxF+upFuDDj+G3N+zPbfe8HtW5QPbugPbqb+3ihfbmW/bXPsqWH7prDYczANadVO7VtubPvOPf3OzUuOfQuu7ZwenUv5lDA9ixa/fBRdOWM8eCFe+zMPry5/XBS/346//xX9iVFciQPv/SMOG/jOarIa5wLLFzK+rj3PfKZ/zw1t6oLuGgIv7tvdCfSs+gKdKweu65Nu/XWP7nT9eRHvnXqPHMP+G6ON+8S9DIwu7UR5BWHvbvktGZHczCu7l9IOSuQP3CJIxSG9G1RNG6VOzRgd6wKsemT+yqGdO7n9/Ce+7SZfHXcO/AM/PIOPfOMeLY0ezj0ZleLPvBH9GsdN/Qq+K3NOrfyubaw+TYzOy+Kv///////yH/C05FVFNDQVBFMi4wAwEAAAAh+QQFBQD/ACwAAAAAGAAYAAAI/wD/CRxIsKDBgwgTKkTRoQCvLVGCMZvQTOHAaUuWDELUYkENHxlBLCywxIGDJRYs6GixxAdIBQhVFAi0yEMdMcPE1PGgYwESDilgGpxwIFuWKlmqZSIhZVi2RFW8pHj2o6CwX/BkzWIzS9YpIxm0aOUqy4yTFQSJ6rHlry0uBjDoMGDrtoSZXWEGGqiRgI2/WLHYJCAAo+/fwAkE9AowEMACCrf+LsnlB8IdUZGXxMoFa0CeHQOfLTAVg5Y/WjFKEf5R+nSMDwN8bRg44gofSEp0uWl3J26GbZZ0xZGERkCJ2QKzYGnhYViDDEYugG0wzEMLLDbwPKCA/J+TA2p0LLcaJoXE0qaLdKhJAmZAozfdQyBDskCHTTFjdPL0yQGPACgIVDAQMAxwcoUaLegQDxAMAhEPEjagMUAPZEjA2EDHjMABFlhc8YIMbWHzAgcSPjBHgHkNpEIxxIBhjA3ObCLjJs7gMUAkNJiwwYUFDcHCKDYAAggaaODRhAAR5GDIBrUkBIISNHzwxQACNBJBH8kwwQMRFi0DggnKBJHDEyacsEEFa1gkkAoY1FLBBjzsUAuPatY5UEAAIfkEBQUA/wAsBAADABAAEgAACMgA//3rEOWInX+IBB4JVECGQIGdlixx8PDfHolCKk5MtUTjHh8dBXpYNEwKiYqLdKhJAgZhtixVer27ILCBoERVvKSgUkTWLBSzZKET6M4nm6Dr9Nh6iIuBQAZLBeIqkYDNQxUJBFZ9yCYBBVr+/vnL5UegqFthx8LKFwMsrRjt/l340dbf2w//TFnSpeRHRUh740iqOKaiYYFNDg87zPifhcc6WqhpLHCB5StYklD+l8RYEhs2WlJuEgkIkEiRNv8D4k8FkMMBAQAh+QQFBQD/ACwEAAcAEAAOAAAIiwD/eRjWIIORfwj/jfHQAouNfxbqSMlAB8YdhBmk1NGhxgYaC2JIGIFBAAJCIyTEWFiQBJCFYZku3IFg8t+FTMNWJgEjLlasJT5rGvnpM9Y/HRIpWvxHJ+PGKy0FEjSY8N8whlg4VB1WtavXr2DDikVIBQgVY2PLQgOCSiygF9D8vWgy9sOmTRG8BgQAIfkEBQUA/wAsAwADABEAEgAACL0A/wmctmTJoH8tBPooCEKgwyUOHCxx+G+Jj4UU/y3yUEcMRR0LkHCgmC1RlSzVSJr0kkIgPFmz2MySdUqgFpgyZZn5p8eWv5+4GAhk4BNoiX8J2PiLFYtNAoFJlzZNoIbCraVLcvkRKOrqkli5YP0zFYOWP1oxSgn8UfZsjA8CISnR5aYdxW2WdMWRhCaj37+AKV4JTFjwv3hAEiuOF/iFjJ8/sb3AA9jZpsuYnQUeCQYQGsqF/30ZIKCR34AAIfkECQUA/wAsAwACABIAEwAACNwA/wmUsGRJNIECoxWUgBDhEiHSljRc0kmExIb/AlmzYKGhGmNHqGHskqhKFkEN43mpwqIQQmSyZrGZJUuLQDkxZ8q6JlCPLX9AcTEQyOBn0BICE7D5FysWmwRJlzZ9KpACLYFLcvkRKOrWP4m5YP1boC0GLX+0YpQS+MMs2hgjBFqApESXGzgQBBq5YUlXHFBoENaRkoEOjIZS6uhQY+PfAIRjMEpuLLnyPzWWM1vGrIOjBR0t1CDRfGWB6StYknAIbNkGOSpAgFBpgkdzYyBAgTzWLPDQixeHKgcEACH5BAUFAP8ALAAAAAAYABgAAAj/AP8JHEiwoMGDCBMqRNGhAK8tUYIxm9BM4cBpS5YMQtRiQQ0fGUEsLLDEgYMlFizoaLHEB0gFCFUUCLTIQx0xw8TU8aBjARIOKWAanHAgW5YqWaplIiFlTLZEVbykePbD4C94smaxmSXrlJEMWrJulWXGicEDemz5W4uLAQw6DNSyLWHGYI0EbPzFisUmAQEYePXyTSDAoBoKt/QuyeUHwh1RiZfEygVrgMEF2mLQ8kcrRqm/PzRzjvHBcsErOiAp0eWm3Z23GbZZ0hVHEprCBbG08DCsQQYjF742GOahBRYbeB6cVaNj0TApJJZKGbZIh5okYJo0MogMyQIdNnHqb+TpkwMeAVAMMuB0RU2LeEDiy49nA82AHmQMHhvBAQuWFzKstRY2L+AxQCRzIGCQCsUQA4Yxzmwi4YTOHEiDCRsgNAQLo9gAyIdoGChABDkYskEtCYGgBA0ffDGAAI1E0EcyTPBAhEU45qjjjhYFBAAh+QQFBQD/ACwDAAMAEQASAAAIzgD/CewQ5Yidf4gEHglUQIbAh52WLHHw8N8eiUIq/puYaknFJXt8eHzoYdEwKSQeDlukQ00SMAIReRjWIIORCwIbDPPQAgsHKv8s1JGSgQ6MOwIzSKnT0gaaoGJIGIFBAIJAIyTEWFiQBNACC8MyXbgDweq/C5mGbTUG6J+4WLGWwDVrJC7cWLAEDi0Ko+JSHVe6ahxckQPhwwIHPOSDGLEOC5B1tFCDBPGVBQuoAKGShMPTBxqTiNYMDQgqPI3/vYDm70WT1P8+bNoUYXBAACH5BAUFAP8ALAQAAgAQABMAAAi6AP/9k7BkSTSBAqMVlIDw3xIh0pb8ayFwSScREhEGsmbBQkM1SI5QQ9glUZUsghrG81KFRaF/yGTNYjNLlhaBcmTSlHVNjy1/QHExEMjgZ9ASCdj4ixWLTQKBSZc2TUCB1tIlufwIFHXL35JYuWCZimGVVoxSAn+Q9Wd2hAVISnS5gdPwhiVdcUChacj3o429fQMj5CP4H2GBTQTqKMy4cd8FarA0JicQCJXEjIH4+wdkQONDL14c6hsQACH5BAkAAP8ALAMACAARABAAAAi0AP8J/OfP38CDBQ8OjKVQIMOGSx4qjNiwosWLA68kEYjoUjUuDXF0myFvYA1t+NKAHDjmU5oz/ez9A5XujAp6aXAM/KQOQxtKpCKJOzOp4D51lSoRUkevIAZKmhSBKFpQn4hBIv4U9PeIUo5JoQxh2MpPA1V/f4b0GRiKDAY2jBgJLPhHXENF9STM2+qPX46KKphM4RtGg4aGKqy42KoCg4TAZVQMDKN4axsX88IUdGElzL+AACH5BAkAAP8ALAAAAAAYABgAAAj/AP8JHEiwoMGDAiUsWSIBocOBDM8sefiwQ5QjdigiNMCiSqIZBOF5qcJinMNxsmaxmSVLjsAiKVfKMnmwhC1/OHExEKjnZs4SCBOwGcgmgUChRI0aPEDhlr9YsXL5gUFHlFOouWAdrGEqBq0lsWKUIgDjh1ewMUYcXOABkhJdbkpBgHDnwg1LuuKAArTWghgSRmAQgEDWCAkxFhYk4Wvwio46UjLQgXGHagYpdXSosYHmIJYWHoY1UMXqm5EMq6pdaoGFA56DB9ToWNTqnL9zq7iY8zfIUxIwTQ4iQ7JARzec/hw5Qt7PtYCDDDhdUeNqkL81ZZD7wIRmQI+Dx0ZwYMCCxZO07DhfcR/wYM5BFcWIgTF2IA/yMr6oDIhEw4TDISyQAs59a/gDBRQ5GLLBQyDkgFwQQeCkwhNM8EAERfNM4Y83EJbjjwbhVLCGRv88sgMPO2zATTg7BEDiiwQFBAAh+QQFZAD/ACwAAAAAGAAYAAAI/wD/CRxIsKDBgwgFSliyRELCgQuXROO1JUqwJffYLXkocIkQaUsQtVhQ40igAjIeojDAokqiGRYs6GgBz0sVFuMQqhgnaxabWbLkiKkzo+dPWTkNTihhy59TXAxISNHT9GmJHwWF/UrAxl+sWGwSGMnA1SvYBE5WEJxwgMItf0ti5fIDg46ot3FzwTKzK8xAAzVMxaDlj1aMUgRg/BhcOMYHAb0CDASwwAMkJbrclIIA4c6FG5Z0xQEFZkCeHQOfLbAghoQRGAQgJDZCQoyFBUkADfC1YeCIKzrqSMlAB8aduhmk1NGhxgYaASV6C8yCpYWHYQ1Usfo2dlW1Sy2w2LrA84CC9H9ODqjR4aHVOX/nVnEx52+QpyRgmjR6cz4EMiQL6NCNU/444giB/XCAhwBQIFDBQMAwwMkVargyCIFlrOGPD5igMUAPZEgg2UDHjMABFlh4Ig2Gr3Q4wANzOOjXQCoUQwwYxhyQRxkE+kLFAJHQYMIGIxY0BAukgOPPGjw6RYMmORiyQS0JgZADgUEEQeATTPBABEfzTOGPN1mW448G3OywBkcCPbIDDztswE04OxTJ5p0DBQQAOw=="],
  773. "8": ["[睡]", "data:image/gif;base64,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"],
  774. "9": ["[大哭]", "data:image/gif;base64,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"],
  775. "10": ["[尴尬]", "data:image/gif;base64,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"],
  776. "11": ["[发怒]", "data:image/gif;base64,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"],
  777. "12": ["[调皮]", "data:image/gif;base64,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"],
  778. "13": ["[龇牙]", "data:image/gif;base64,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"],
  779. "14": ["[微笑]", "data:image/gif;base64,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"],
  780. "15": ["[难过]", "data:image/gif;base64,R0lGODlhGAAYAPf/AP/3eNulQ//1bf/FH6liEraBRsN9FP/kUvncm5pGBv64E//89v/DHe7TW/CjC//KJf/GIP/oXf/hQsuHG9nUz//wXf/9sf/ZOf/7ltKNHPSoDP+6FP/dPf/cOv/qUv/mSP/PKrBwGvnGMf/ePf/3dP/9ueSXCv/VMfrDJv/9sv/aOf/WNP/5h4pKC//qT//AGv/+x//7lf+3EP+5Ev+3D9KKF/GsEf/tZf3fQ7JqGvnEJffGK/a8Jvy0EP/fPvuuDNqNCs6FDv/bOcF0EP/xX9fRzHwtAP/qUP/lR//SLf/RLf/uV6t5XLxxDdfSzf/oTP/MJv/sU+bAi//SLrhfAOrn5NzX0+vAO93Y1Pv6+vTNP+Pf3P/uWP/pTf/rUP/7oF0jAP+/Gf/5iMp7EP/7m//+0P/8oOulFruRZfCwH//iQubi3/zTOP3RMuro5fW5M7mIU8OIJsyLIst9CMKKPtakOemsLf7kS/Du7PvhpeCnIvry5/3468uJGuG/jPbLNt2cH8CXZ/bYmfzZPvfBRfXBS/60Dv/nWffKZ++zMLiESfzw1v/XNOCfJOKyUvnFL+2+WPrfV/7TNOfe0PvIK92hH86ACLFzK+afEOq4UtLFuPPesOnIkfzlr71/LuSsJahdCb13FMivlurj3MiQPq9mEOW9RO24S+GgIfOxF+WmJseCFv7PL/79/Nixa/mzE9KWM/bGWfTy8fjKX8N8D97Z1d/a1vfIW9mYIZBMAP/fQOjl4vzpZq5aAMWebfW3Kcmphs2sg/e8N/38/KxtJf/+/PbEL+Tg3a5wLLd7Mv/nS9+4b//kRu7JP//xYLBxIe63JO7XmMuHIdCGFO3RqsuIKf2xDP3ZOu7Ub+7OSP/RLu7AL+aqIP/qUbBuE9KMGv/kR9KOINKPJv/lSP/oTfTkrKBNC97Aif/8pLhyKMaAIsaAK/TigP/3e/DGM/+7FfTfaPTUQ//9t8Z/Hv/pTufLbP2wC/3aOv/ubv/QKv/xau3WYf/6j+aqH////////yH/C05FVFNDQVBFMi4wAwEAAAAh+QQFlgD/ACwAAAAAGAAYAAAI/wD/CRxIsKDBgwgTKlzQaRahX28KIUKwSOHAPMIesbnG4UIbSjwgbVp4SwSOLkdcuFDGTNcFFHYyISwWS4SHKEsqEKmw5AgSCRdYpXF0EIGxKM0yjAnXAICAbN/G1IAmqdGygnwS3TkyQYo/KdJisAjnldo0KCgCTCIo6M8HLkP8yR2S4kvcuSAYnHGVZeCpQU8qDGFihMkQGBYGFx6iZMArWLsGqpLQxdkEI2CMVCtTQhxmIzWmDFDQx8pAVBwCNwjR4lk0GCmwsfa2LcmAGaucDAQk5K0AFl8slLBgRoyAJR+E5JVhoMhAXCvUeCFCggUGMhhYkCDSTQIjKGEMhc5yLjDAjg7gojgTcONAhAjukXRQAuGdBk+6BXLidoIDkiMH1EFFLrlQYcohJzzwAg1A+ILFQHvIocMJHfDShAFXPPHBFbT0EgkDMziQjCZuEOTHJw8o0YQWI/gwghCMJKFFExtYU0ogtvQ1UCuk6AEBFCAkMUUSIEABwQsz/GCJIk5UcRAdlaTCwAAQDMBAGO/QYAIBcBSxRULBxBEEJjbM0IMGJsyBjCgUrGHRKMAUcAkoBBBTABpF1CKLRQINg8cWWBRBgRXHOMnnoQUFBAAh+QQFBQD/ACwHAA4ABQAEAAAIDgCJ/Bv4zwvBgwj/cQgIACH5BAWWAP8ALAcADgAIAAQAAAgRAJ39G0iwoEGD4w6O6PBPW0AAIfkEBQUA/wAsAwADABIAEQAACLgA/wkc+O8ewYMIyQmkN1AFwocCvQh0iDAKEQEA2gkkEgVJByUIiZBggYHMPzEkiByRwIjguCUCWHyxUMKCGTECuHwQghAAhhQwygiMAaDCkxFJCBKZx65EuXUC1cFzFs+AwBn/uvzbl8NcunP/LNTLkaCUu4NL2mFA909ein/82unDdyDfQAkIY4gReESNwBcDkfwjAvFgv4FHCkNByHMguQ8HNxQe8dAeRJDaCEou/G/A338yDgYEADs="],
  781. "16": ["[酷]", "data:image/gif;base64,R0lGODlhGAAYAPf/ANWiOtWkVP60Dv/89v/cOvjGMP+5E//XNf/1beXEav/wXdnUz//VMbhrEv/wX2loS/+7FDIsDf/GIOSXCv/aOf/DHf/tV//pT//9sf/ePf/AGv/FIP/+0P/6lf/KJf/4e//5iP/3eP/3d//dPf/EH//9uQ4LA9ShMtSfLP7hRf/gQf3dQ/7dP97bgv/TLv/PK//LKdXHSvfGK/y1Ef2xDPGsEtSmRvCjC9ilGdqOC5+SM7+HEnJuNmZjLmZaGxgUBdfRzP/fRf/lR6WclKpSBr5pCdfSzf/sU//RLf/qUP/mSL2Xdern5OPf3NzX0/////v6+t3Y1I5lQf/iQv/LJv/oTP/pTf/oTf+3EP/xX//uV8t+CPe8N9LFuFdXR65wLPncnOG/jOrj3NOYEPWyEs2sg+fe0P+/GcKKPlpZNv/ePr13FKxtJfbEL/XBS5SMhffIW8iQPvry50g4CYV+ePW3KeGgIe24SyQiDLiESfzw1suJGqdgEMyLIu7CUntvI86ACP/7mzkyDqhdCf/hQrSAR/jbmrd7MvPesOC0N++zMPjKX/fKZ/3XOcivltiVFf/TMOnIkfOpDYczAPTy8bmIU5OQTruRZcCXZ/Du7PbGWczHbdmYIZyTOv38/P79/Pi3GvnEJfvhpfzlr65mD//MJ+afELFzK+HZZuWmJvvLMPrNN/zPNP346/C/JMJ8FP/+x+ro5cWebdWOEfbYmfHIWG9tRv//197Z1d/a1v7IJXVwMmZeIPfBReCfJMeCFvuvDP7nT+jl4t2cH/3fRMmphu65Nu3HU/W5M/SnC/CwH86EDr1/Lv/2dGZgJrNvGtixa+Tg3ebi3//+/PzfQf/qUY13Hf/rUfPRNtmkQtylRKpjE9KWM7eCRbVpHeC3PTw4Nfz3k3p0bv/rU//8mtejTdKUINKYJeaqH+XFW+aqIP/3e/OyGO7YbeCoJOC7T7hsGO7Zgfn4woRzIMaHK92bGN2cGMaJNf/XNP/7n9ahQbVpGf/RLv/SLQAAAP///yH/C05FVFNDQVBFMi4wAwEAAAAh+QQFFAD/ACwAAAAAGAAYAAAI/wD/CRxIsKDBgwgTKhwwalGvOsjcMAKjR+FAUVxWrUhBiEUjVgVqIVoIp0CwK1esWFFCiAADVcb8IJymqcC4JFoUZFGgJYmQDAx0KTt20FCbC4lOIBDx4R2CLEfOueO3wVeCgq0UEUuSBZ6NDuTugWh2ogEhfFRAZTNDkJYJf3h2bQpAJIG3eEQAxPgTwZ+/HdCgDLzzw6/fB3RhEdHHw7DfMdyEDUwlyPASKV5ucSiRxp+UJYbJ7HEy0M48y08c+30C2t8cA7+MDByGra/jBxhsqf6BA8srIAM54aOmw1kPSy0CdQCBqhMvH9ZcnRGwBrhAbTIICDmSBUGIdSKeHrYRQgCJBAjJmMkWGEkdgwxCruXc2fMnAyoasOSQFWWgnD6hUEDAFEpUYcUVSgThUikVGHDDIV3EQlAY9VBxAD4UjKBGEUUEgQQVFUBAAymY5CLYQJ/E8YgEkLyARD9FTBKEBBoYAAwgeRjBxEFozMIODCRsEEQQZ0CAxQTbVAJEEwmV8cwyptRgwAySTLDFF44sII1FYhTTzSmD8MFGIZcAgQslFgnkSSZNRAHEAk5Es2OadBYUEAAh+QQFFAD/ACwDAAMAEQARAAAIhAD/CRwoUAXBgwQvVPm3cArCgYlQDPxmodo/c+4QHmkAQCC9fw5QNCCABGGzf0TS7WtH5F8Shw/zlSOCgQgABA+HgBMoj8M/DOEGihsy8M0QojmHvCFIBynCIXQeSp1K9Z+Ghx9CHOwnEN1UiyP+eZh6oUgRqfYGEqj60AXbgRsGXj0YEAA7"],
  782. "17": ["[冷汗]", "data:image/gif;base64,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"],
  783. "18": ["[抓狂]", "data:image/gif;base64,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"],
  784. "19": ["[吐]", "data:image/gif;base64,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"],
  785. "20": ["[偷笑]", "data:image/gif;base64,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"],
  786. "21": ["[可爱]", "data:image/gif;base64,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"],
  787. "22": ["[白眼]", "data:image/gif;base64,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"],
  788. "23": ["[傲慢]", "data:image/gif;base64,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"],
  789. "24": ["[饿]", "data:image/gif;base64,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"],
  790. "25": ["[困]", "data:image/gif;base64,R0lGODlhGAAYAPfPAO21Kv///ua1UuTf2Nm3bbeESv/OK8h7EeqmFtfSzejWV//9s/7pXfqzEfzjqt3Y1OrSSP/7lv/CHPzXOt2iG+fi3c+HDt3IV//GINGkJfyxDOOcEPz16fm9HP/KJv/dPffIXPW3Kf/lSO7DSern5MObavjamvzw1vS8Nuu2Sf/5ismGGOOjJN3Nev/2cv/0bP/bOf65E//oTPbBSP/VMf77rOy9Os23WMyACeqxHP/xXv/RLurMPsurhPvSQN2cHP/uV9K2Rf79xfbrcPrML/uuC/LVRufbeurbZ//hQtO3VvXELNOuNtGzPOvhhdulQ+mxPM2uOaliEvXolf/qUP7iRf/3d//89unDM//+z/C2HfbLNt6oH+3BWf3dQfGlDM+oLvTZT/vZPvrQMf/4fP/TMNKbHP/lR/3bPtaOD71/LuegEP/WM/XGMvrYQ/CxGP/cOv/yYqxtJs20SPnVN92yKvjgSvnfRdWSFf3gSva/JeWpIPrFJuKXCu/KNfGhCLNvGv7fS/7nS/3jTemsMv/8oOvinPjGMfzSNPbzw/bxrs6fIfvrWe/ib+fdl/vmTufbiNiVFd3APvbxp+OhMdKNHLxxDfz7++nHjunIkfTy8cyLIsKKPrd7MsiQPtmYIdKWM65mD9LFuL13FPPesPfKZ/Du7Mivll0jAKhdCfjGPruRZe65NgAAAOG/jOauLrByK//bR//YQ/njTP/fPvnnVO/SQPTdY/bpZ+vjr//sVPvaPPHdWPblWPi3Geq8K/biUvbaRO2rE/3dR+7GZ+7Gce3gePzlS/DQPPzPNufENufGOejHOdWXGN2fFP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQFZADPACwAAAAAGAAYAAAI/wCfCRxIsKDBgwgTKrziAMSMEChmlDJxQuFAB6p8ePGS5MOEZIe6kFoIIk8VETJSikgCAwYRVgIQBgAx6AwVIDpyAqFy5gMND21iGjTh5owRGzZukbHyQsdRG3owvCJQkAMKLzagUKKUoksEFSO0UiIEwNeTAQRNbBGxtS2lBYXcbpWAgMClgSnECJJLSUgNvhIagKowkAUaO5UCtEIVoFIiRYkXN+4QY8WDwhOMVMIUIACmSrkMbe78WUuDFQkG/qDDg0mlAwcqEXAEScnr2GZyNDiQWuAnRMgkBblxg0ALJ8YuBIkCJgOXNxpG9X72ZAkdWxAUKEDSaAguXhCYYaz5ZfqLmumZ9pTZdWdWLUbwGT26M4EInw4N0pS4LJDDJiI0wJCECIJQIcNKMPwkQQxfdCIKCQS58sMOO7ABwwe/WGABADt4sKAGoex310CXeBKJAR4YsIMlnVmCwYJF4FBAAhAaxEkaekgQCx6WWJKGLDH0IcWMaCHUAyAWrOEDAwz40AcOsJzyAGEKVdBDAbCkIoUcBaySwAOaWCTQJaYM8EACX1ZQo5hsEhQQACH5BAUyAM8ALAMABAASABAAAAjKAJ8JHEjwGZyCCBMqfKZLxwsrBHWdgbOjIJUwNmwYiyDQBUYbSzwMFGQDisAUxAR2MfmMEACBaGQkXIAQw7MPjyjp3Jllwc6dEp7tsvMsQCtUAZ4lmlT0aNIOMSbYqoQpQABMlQw5oWoVq5ZnY3gwqXTgQCUlkI4EIWvWjLAiz/xIajJnzo0LSBRcaAImQwYKwgQS8cODBwQFvHoBM8IDy68cbwiOmRDszqxjx6p4oTOGT4cGfxTS+gCDzcKCACxYyHGaoCWBrxEGBAAh+QQFZADPACwDAAMAEgASAAAI/wCfCRSYbAKbg2OILBnIUCAaGB9ofYDBZscOPg2f5YGTRISMjyKSwKHhQULDD2eoANHBEgiVMx/KlBw44YwuHS+skLHyQoeuM3B2YGggMAkVHS5URFiqwoUOKknYeHi2RowIILxs2JiyYEEhFVlttDFg8pmgEVAECigm5FmXtM8IAcDw7IMMSnjzZlmQNy/dD4L64hVSQzAlCTEm3DE8aYrhDg3aIKvUt5ITY5TzVnojEAuYSgcOVAqCRAET0KKbCetch0mUKEEkKVAgiQmYRWacbRBIwQ8WZjx4GLETDBmWXzlyrH4W4FkzRGPoTNi1awIiInwgZ8SzxEAgAAJzxAySsDvjQARuBpZnGBAAIfkEBQoAzwAsAwADABIAFAAACP8AnwkciMiAQT589Axc+GzYhDJs2NAoY8CDB4UMn5WBQatKlSS0YJTxICHGkoE+aHwQQUUXEF1URNBiQ7LBwB20BAGJ88LFizhABNEqgyFGkWdtYIjQ9YKMimcqyLwAIgKGAQk2ESWhEodMhBrPakQgE4fK0KJF2CQB8kJFDSFZwqp4oasKG7RszgBxEWFBlrjPIrioSzOGBjZVmLqFK3CuriR3jeLk6rXGArFkzRI1ygeG3qYqIkSdesZqyT8aP8jY2fMnEBkfiErQIJAIG1qUcleCAKFSbkqzUT/7UabOgQOVwDBTlqHS8T60n116FsmAmUUZ6mD5xcUMHgtHGaYh4ZIjhxY9Hd4gWGMhVEaBODYIi9HgS58Dct7r389/AMOAACH5BAUyAM8ALAMAAwASABQAAAj/AJ8JFOjDi5ckHyYkOzSw4bM8VUTImCgiCRwYRBw+G3SGChAdIIFQOfOBhoc2A92cMWLDxi0yVl7oYGlDD4aBXmxAoUQpRZcIKkbspEQIgK9nW0TwXEppQSGmPCUgECMIKiUhNaxKaIDGTqUArVAFqJRI0dewYzvEmGCkEqYAATBVymXILVy5WhrQ4cGk0oEDlQg4gqTEL2AzORogQiYpyI0bBFo4MXYhSBQwGbi80bCEji0IChQgaTQEFy8IPLD8yvtF4K47s2oxms3o0Z0JY/h0aDCQBowkIgRRkVERhslnMVoL3LGDDZwPvyxYAFDGg4QYGp95MLDDElxLGK5nIX+mR0IsPJYspZEVo4+U8RbW+GDAwMczHLDG69+fvYLDgAAh+QQFHgDPACwDAAQADwANAAAIKwCfCXyWZ+BAGAYTKlzIsKHDhxAbUppIySBFSrsEXrRIMaLHj8w+eiwjMCAAOw=="],
  791. "26": ["[惊恐]", "data:image/gif;base64,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"],
  792. "27": ["[流汗]", "data:image/gif;base64,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"],
  793. "28": ["[憨笑]", "data:image/gif;base64,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"],
  794. "29": ["[大兵]", "data:image/gif;base64,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"],
  795. "30": ["[奋斗]", "data:image/gif;base64,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"],
  796. "31": ["[咒骂]", "data:image/gif;base64,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"],
  797. "32": ["[疑问]", "data:image/gif;base64,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"],
  798. "33": ["[嘘]", "data:image/gif;base64,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"],
  799. "34": ["[晕]", "data:image/gif;base64,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"]
  800. };
  801. //工具类
  802. var tool = new function () {
  803. //格式化时间戳
  804. this.formatTimeStamp = function (time, format) {
  805. if (time == 0) {
  806. return time;
  807. }
  808. format = format || 'yyyy-MM-dd hh:mm:ss';
  809. var date = new Date(time * 1000);
  810. var formatTime;
  811. var o = {
  812. "M+": date.getMonth() + 1, //月份
  813. "d+": date.getDate(), //日
  814. "h+": date.getHours(), //小时
  815. "m+": date.getMinutes(), //分
  816. "s+": date.getSeconds() //秒
  817. };
  818. if (/(y+)/.test(format))
  819. formatTime = format.replace(RegExp.$1, (date.getFullYear() + "").substr(4 - RegExp.$1.length));
  820. for (var k in o) {
  821. if (new RegExp("(" + k + ")").test(formatTime))
  822. formatTime = formatTime.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
  823. }
  824. return formatTime;
  825. };
  826. //根据群类型英文名转换成中文名
  827. this.groupTypeEn2Ch = function (type_en) {
  828. var type_ch = null;
  829. switch (type_en) {
  830. case 'Public':
  831. type_ch = '公开群';
  832. break;
  833. case 'ChatRoom':
  834. type_ch = '聊天室';
  835. break;
  836. case 'Private':
  837. type_ch = '讨论组';
  838. break;
  839. case 'AVChatRoom':
  840. type_ch = '直播聊天室';
  841. break;
  842. default:
  843. type_ch = type_en;
  844. break;
  845. }
  846. return type_ch;
  847. };
  848. //根据群类型中文名转换成英文名
  849. this.groupTypeCh2En = function (type_ch) {
  850. var type_en = null;
  851. switch (type_ch) {
  852. case '公开群':
  853. type_en = 'Public';
  854. break;
  855. case '聊天室':
  856. type_en = 'ChatRoom';
  857. break;
  858. case '讨论组':
  859. type_en = 'Private';
  860. break;
  861. case '直播聊天室':
  862. type_en = 'AVChatRoom';
  863. break;
  864. default:
  865. type_en = type_ch;
  866. break;
  867. }
  868. return type_en;
  869. };
  870. //根据群身份英文名转换成群身份中文名
  871. this.groupRoleEn2Ch = function (role_en) {
  872. var role_ch = null;
  873. switch (role_en) {
  874. case 'Member':
  875. role_ch = '成员';
  876. break;
  877. case 'Admin':
  878. role_ch = '管理员';
  879. break;
  880. case 'Owner':
  881. role_ch = '群主';
  882. break;
  883. default:
  884. role_ch = role_en;
  885. break;
  886. }
  887. return role_ch;
  888. };
  889. //根据群身份中文名转换成群身份英文名
  890. this.groupRoleCh2En = function (role_ch) {
  891. var role_en = null;
  892. switch (role_ch) {
  893. case '成员':
  894. role_en = 'Member';
  895. break;
  896. case '管理员':
  897. role_en = 'Admin';
  898. break;
  899. case '群主':
  900. role_en = 'Owner';
  901. break;
  902. default:
  903. role_en = role_ch;
  904. break;
  905. }
  906. return role_en;
  907. };
  908. //根据群消息提示类型英文转换中文
  909. this.groupMsgFlagEn2Ch = function (msg_flag_en) {
  910. var msg_flag_ch = null;
  911. switch (msg_flag_en) {
  912. case 'AcceptAndNotify':
  913. msg_flag_ch = '接收并提示';
  914. break;
  915. case 'AcceptNotNotify':
  916. msg_flag_ch = '接收不提示';
  917. break;
  918. case 'Discard':
  919. msg_flag_ch = '屏蔽';
  920. break;
  921. default:
  922. msg_flag_ch = msg_flag_en;
  923. break;
  924. }
  925. return msg_flag_ch;
  926. };
  927. //根据群消息提示类型中文名转换英文名
  928. this.groupMsgFlagCh2En = function (msg_flag_ch) {
  929. var msg_flag_en = null;
  930. switch (msg_flag_ch) {
  931. case '接收并提示':
  932. msg_flag_en = 'AcceptAndNotify';
  933. break;
  934. case '接收不提示':
  935. msg_flag_en = 'AcceptNotNotify';
  936. break;
  937. case '屏蔽':
  938. msg_flag_en = 'Discard';
  939. break;
  940. default:
  941. msg_flag_en = msg_flag_ch;
  942. break;
  943. }
  944. return msg_flag_en;
  945. };
  946. //将空格和换行符转换成HTML标签
  947. this.formatText2Html = function (text) {
  948. var html = text;
  949. if (html) {
  950. html = this.xssFilter(html);//用户昵称或群名称等字段会出现脚本字符串
  951. html = html.replace(/ /g, " ");
  952. html = html.replace(/\n/g, "<br/>");
  953. }
  954. return html;
  955. };
  956. //将HTML标签转换成空格和换行符
  957. this.formatHtml2Text = function (html) {
  958. var text = html;
  959. if (text) {
  960. text = text.replace(/&nbsp;/g, " ");
  961. text = text.replace(/<br\/>/g, "\n");
  962. }
  963. return text;
  964. };
  965. //获取字符串所占字节数
  966. this.getStrBytes = function (str) {
  967. if (str == null) return 0;
  968. if (typeof str != "string") {
  969. str += "";
  970. }
  971. return str.replace(/[^x00-xff]/g, "012").length;
  972. };
  973. //防止XSS攻击
  974. this.xssFilter = function (val) {
  975. val = val.toString();
  976. val = val.replace(/[<]/g, "&lt;");
  977. val = val.replace(/[>]/g, "&gt;");
  978. val = val.replace(/"/g, "&quot;");
  979. //val = val.replace(/'/g, "&#039;");
  980. return val;
  981. };
  982. //去掉头尾空白符
  983. this.trimStr = function (str) {
  984. if (!str) return '';
  985. str = str.toString();
  986. return str.replace(/(^\s*)|(\s*$)/g, "");
  987. };
  988. //判断是否为8位整数
  989. this.validNumber = function (str) {
  990. str = str.toString();
  991. return str.match(/(^\d{1,8}$)/g);
  992. };
  993. this.getReturnError = function (errorInfo, errorCode) {
  994. if (!errorCode) {
  995. errorCode = -100;
  996. }
  997. var error = {
  998. 'ActionStatus': ACTION_STATUS.FAIL,
  999. 'ErrorCode': errorCode,
  1000. 'ErrorInfo': errorInfo + "[" + errorCode + "]"
  1001. };
  1002. return error;
  1003. };
  1004. //设置cookie
  1005. //name 名字
  1006. //value 值
  1007. //expires 有效期(单位:秒)
  1008. //path
  1009. //domain 作用域
  1010. this.setCookie = function (name, value, expires, path, domain) {
  1011. var exp = new Date();
  1012. exp.setTime(exp.getTime() + expires * 1000);
  1013. document.cookie = name + "=" + escape(value) + ";expires=" + exp.toGMTString();
  1014. };
  1015. //获取cookie
  1016. this.getCookie = function (name) {
  1017. var result = document.cookie.match(new RegExp("(^| )" + name + "=([^;]*)(;|$)"));
  1018. if (result != null) {
  1019. return unescape(result[2]);
  1020. }
  1021. return null;
  1022. };
  1023. //删除cookie
  1024. this.delCookie = function (name) {
  1025. var exp = new Date();
  1026. exp.setTime(exp.getTime() - 1);
  1027. var value = this.getCookie(name);
  1028. if (value != null)
  1029. document.cookie = name + "=" + escape(value) + ";expires=" + exp.toGMTString();
  1030. };
  1031. //根据名字获取url参数值
  1032. this.getQueryString = function (name) {
  1033. var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
  1034. var r = window.location.search.substr(1).match(reg);
  1035. if (r != null) return unescape(r[2]);
  1036. return null;
  1037. };
  1038. //判断IE版本号,ver表示版本号
  1039. this.isIE = function (ver) {
  1040. var b = document.createElement('b');
  1041. b.innerHTML = '<!--[if IE ' + ver + ']><i></i><![endif]-->';
  1042. return b.getElementsByTagName('i').length === 1;
  1043. };
  1044. //判断浏览器版本
  1045. this.getBrowserInfo = function () {
  1046. var Sys = {};
  1047. var ua = navigator.userAgent.toLowerCase();
  1048. log.info('navigator.userAgent=' + ua);
  1049. var s;
  1050. (s = ua.match(/msie ([\d.]+)/)) ? Sys.ie = s[1] :
  1051. (s = ua.match(/firefox\/([\d.]+)/)) ? Sys.firefox = s[1] :
  1052. (s = ua.match(/chrome\/([\d.]+)/)) ? Sys.chrome = s[1] :
  1053. (s = ua.match(/opera.([\d.]+)/)) ? Sys.opera = s[1] :
  1054. (s = ua.match(/version\/([\d.]+).*safari/)) ? Sys.safari = s[1] : 0;
  1055. if (Sys.ie) {//Js判断为IE浏览器
  1056. return {
  1057. 'type': 'ie',
  1058. 'ver': Sys.ie
  1059. };
  1060. }
  1061. if (Sys.firefox) {//Js判断为火狐(firefox)浏览器
  1062. return {
  1063. 'type': 'firefox',
  1064. 'ver': Sys.firefox
  1065. };
  1066. }
  1067. if (Sys.chrome) {//Js判断为谷歌chrome浏览器
  1068. return {
  1069. 'type': 'chrome',
  1070. 'ver': Sys.chrome
  1071. };
  1072. }
  1073. if (Sys.opera) {//Js判断为opera浏览器
  1074. return {
  1075. 'type': 'opera',
  1076. 'ver': Sys.opera
  1077. };
  1078. }
  1079. if (Sys.safari) {//Js判断为苹果safari浏览器
  1080. return {
  1081. 'type': 'safari',
  1082. 'ver': Sys.safari
  1083. };
  1084. }
  1085. return {
  1086. 'type': 'unknow',
  1087. 'ver': -1
  1088. };
  1089. };
  1090. };
  1091. //日志对象
  1092. var log = new function () {
  1093. var on = true;
  1094. this.setOn = function (onFlag) {
  1095. on = onFlag;
  1096. };
  1097. this.getOn = function () {
  1098. return on;
  1099. };
  1100. this.error = function (logStr) {
  1101. try {
  1102. on && console.error(logStr);
  1103. } catch (e) { }
  1104. };
  1105. this.warn = function (logStr) {
  1106. try {
  1107. on && console.warn(logStr);
  1108. } catch (e) { }
  1109. };
  1110. this.info = function (logStr) {
  1111. try {
  1112. on && console.info(logStr);
  1113. } catch (e) { }
  1114. };
  1115. this.debug = function (logStr) {
  1116. try {
  1117. on && console.debug(logStr);
  1118. } catch (e) { }
  1119. };
  1120. };
  1121. //获取unix时间戳
  1122. var unixtime = function (d) {
  1123. if (!d) d = new Date();
  1124. return Math.round(d.getTime() / 1000);
  1125. };
  1126. //时间戳转日期
  1127. var fromunixtime = function (t) {
  1128. return new Date(t * 1000);
  1129. };
  1130. //获取下一个消息序号
  1131. var nextSeq = function () {
  1132. if (curSeq) {
  1133. curSeq = curSeq + 1;
  1134. } else {
  1135. curSeq = Math.round(Math.random() * 10000000);
  1136. }
  1137. return curSeq;
  1138. };
  1139. //产生随机数
  1140. var createRandom = function () {
  1141. return Math.round(Math.random() * 4294967296);
  1142. };
  1143. //睡眠
  1144. var sleep = function (n) {
  1145. var start = new Date().getTime();
  1146. while (true) if (new Date().getTime() - start > n) break;
  1147. };
  1148. //获取ajax请求对象
  1149. var getXmlHttp = function () {
  1150. var xmlhttp = null;
  1151. if (window.XMLHttpRequest) {
  1152. xmlhttp = new XMLHttpRequest();
  1153. } else {
  1154. try {
  1155. xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
  1156. } catch (e) {
  1157. try {
  1158. xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
  1159. } catch (e) {
  1160. return null;
  1161. }
  1162. }
  1163. }
  1164. return xmlhttp;
  1165. };
  1166. //发起ajax请求
  1167. var ajaxRequest = function (meth, url, req, timeout, isLongPolling, cbOk, cbErr) {
  1168. var xmlHttpObj = getXmlHttp();
  1169. var error, errInfo;
  1170. if (!xmlHttpObj) {
  1171. errInfo = "创建请求失败";
  1172. var error = tool.getReturnError(errInfo, -1);
  1173. log.error(errInfo);
  1174. if (cbErr) cbErr(error);
  1175. return;
  1176. }
  1177. //保存ajax请求对象
  1178. xmlHttpObjSeq++;
  1179. xmlHttpObjMap[xmlHttpObjSeq] = xmlHttpObj;
  1180. xmlHttpObj.open(meth, url, true);
  1181. xmlHttpObj.onreadystatechange = function () {
  1182. if (xmlHttpObj.readyState == 4) {
  1183. xmlHttpObjMap[xmlHttpObjSeq] = null;//清空
  1184. if (xmlHttpObj.status == 200) {
  1185. if (cbOk) cbOk(xmlHttpObj.responseText);
  1186. xmlHttpObj = null;
  1187. } else {
  1188. var errInfo = "请求服务器失败,请检查你的网络是否正常";
  1189. var error = tool.getReturnError(errInfo, -2);
  1190. xmlHttpObj = null;
  1191. //if (!isLongPolling && cbErr) cbErr(error);
  1192. if (cbErr) cbErr(error);
  1193. }
  1194. }
  1195. };
  1196. xmlHttpObj.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
  1197. //设置超时时间
  1198. if (!timeout) {
  1199. timeout = ajaxDefaultTimeOut;//设置ajax默认超时时间
  1200. }
  1201. if (timeout) {
  1202. xmlHttpObj.timeout = timeout;
  1203. xmlHttpObj.ontimeout = function (event) {
  1204. var errInfo = "请求服务器超时";
  1205. var error = tool.getReturnError(errInfo, -3);
  1206. xmlHttpObj = null;
  1207. if (cbErr) cbErr(error);
  1208. };
  1209. }
  1210. //
  1211. xmlHttpObj.send(req);
  1212. };
  1213. //发起ajax请求(json格式数据)
  1214. var ajaxRequestJson = function (meth, url, req, timeout, isLongPolling, cbOk, cbErr) {
  1215. ajaxRequest(meth, url, JSON.stringify(req), timeout, isLongPolling, function (resp) {
  1216. var json = null;
  1217. //if (resp) eval('json=('+resp+');');//将返回的json字符串转换成json对象
  1218. //if (resp) json=eval('('+resp+')');//将返回的json字符串转换成json对象
  1219. if (resp) json = JSON.parse(resp);//将返回的json字符串转换成json对象
  1220. if (cbOk) cbOk(json);
  1221. }, cbErr);
  1222. };
  1223. //判断用户是否已登录
  1224. var isLogin = function () {
  1225. return ctx.sdkAppID && ctx.identifier;
  1226. };
  1227. //检查是否登录
  1228. var checkLogin = function (cbErr, isNeedCallBack) {
  1229. if (!isLogin()) {
  1230. if (isNeedCallBack) {
  1231. var errInfo = "请登录";
  1232. var error = tool.getReturnError(errInfo, -4);
  1233. if (cbErr) cbErr(error);
  1234. }
  1235. return false;
  1236. }
  1237. return true;
  1238. };
  1239. //检查是否访问正式环境
  1240. var isAccessFormalEnv = function () {
  1241. return isAccessFormaEnvironment;
  1242. };
  1243. //根据不同的服务名和命令,获取对应的接口地址
  1244. var getApiUrl = function (srvName, cmd, cbOk, cbErr) {
  1245. var srvHost = SRV_HOST;
  1246. if (isAccessFormalEnv()) {
  1247. srvHost = SRV_HOST.FORMAL.COMMON;
  1248. } else {
  1249. srvHost = SRV_HOST.TEST.COMMON;
  1250. }
  1251. if (srvName == SRV_NAME.PIC) {
  1252. if (isAccessFormalEnv()) {
  1253. srvHost = SRV_HOST.FORMAL.PIC;
  1254. } else {
  1255. srvHost = SRV_HOST.TEST.PIC;
  1256. }
  1257. }
  1258. //如果访问的接口是大群(长轮询和进群和退群)接口
  1259. if (srvName == SRV_NAME.BIG_GROUP_LONG_POLLING || srvName == SRV_NAME.BIG_GROUP) {
  1260. if (isAccessFormalEnv()) {
  1261. host = SRV_HOST.FORMAL.BIG_GROUP;
  1262. } else {
  1263. host = SRV_HOST.TEST.BIG_GROUP;
  1264. }
  1265. }
  1266. var url = srvHost + '/' + SRV_NAME_VER[srvName] + '/' + srvName + '/' + cmd + '?websdkappid=' + SDK.APPID + "&v=" + SDK.VERSION;
  1267. if (isLogin()) {
  1268. if (cmd == 'login') {
  1269. url += '&identifier=' + encodeURIComponent(ctx.identifier) + '&usersig=' + ctx.userSig;
  1270. } else {
  1271. if (ctx.tinyid && ctx.a2) {
  1272. url += '&tinyid=' + ctx.tinyid + '&a2=' + ctx.a2;
  1273. } else {
  1274. if (cbErr) {
  1275. log.error("tinyid或a2为空[" + srvName + "][" + cmd + "]");
  1276. cbErr(tool.getReturnError("tinyid或a2为空[" + srvName + "][" + cmd + "]", -5));
  1277. return false;
  1278. }
  1279. }
  1280. }
  1281. url += '&contenttype=' + ctx.contentType;
  1282. }
  1283. url += '&sdkappid=' + ctx.sdkAppID + '&accounttype=' + ctx.accountType + '&apn=' + ctx.apn + '&reqtime=' + unixtime();
  1284. return url;
  1285. };
  1286. //重置ajax请求
  1287. var clearXmlHttpObjMap = function () {
  1288. //遍历xmlHttpObjMap{}
  1289. for (var seq in xmlHttpObjMap) {
  1290. var xmlHttpObj = xmlHttpObjMap[seq];
  1291. if (xmlHttpObj) {
  1292. xmlHttpObj.abort();//中断ajax请求(长轮询)
  1293. xmlHttpObjMap[xmlHttpObjSeq] = null;//清空
  1294. }
  1295. }
  1296. xmlHttpObjSeq = 0;
  1297. xmlHttpObjMap = {};
  1298. };
  1299. //重置sdk全局变量
  1300. var clearSdk = function () {
  1301. clearXmlHttpObjMap();
  1302. //当前登录用户
  1303. ctx = {
  1304. sdkAppID: null,
  1305. appIDAt3rd: null,
  1306. accountType: null,
  1307. identifier: null,
  1308. identifierNick: null,
  1309. userSig: null,
  1310. contentType: 'json',
  1311. apn: 1
  1312. };
  1313. opt = {};
  1314. curSeq = 0;
  1315. //ie8,9采用jsonp方法解决ajax跨域限制
  1316. jsonpRequestId = 0;//jsonp请求id
  1317. //最新jsonp请求返回的json数据
  1318. jsonpLastRspData = null;
  1319. apiReportItems = [];
  1320. MsgManager.clear();
  1321. };
  1322. //登录
  1323. var _login = function (loginInfo, listeners, options, cbOk, cbErr) {
  1324. clearSdk();
  1325. if (options) opt = options;
  1326. if (opt.isAccessFormalEnv == false) {
  1327. isAccessFormaEnvironment = opt.isAccessFormalEnv;
  1328. }
  1329. if (opt.isLogOn == false) {
  1330. log.setOn(opt.isLogOn);
  1331. }
  1332. /*
  1333. if(opt.emotions){
  1334. emotions=opt.emotions;
  1335. webim.Emotions= emotions;
  1336. }
  1337. if(opt.emotionDataIndexs){
  1338. emotionDataIndexs=opt.emotionDataIndexs;
  1339. webim.EmotionDataIndexs= emotionDataIndexs;
  1340. }*/
  1341. if (!loginInfo) {
  1342. if (cbErr) {
  1343. cbErr(tool.getReturnError("loginInfo is empty", -6));
  1344. return;
  1345. }
  1346. }
  1347. if (!loginInfo.sdkAppID) {
  1348. if (cbErr) {
  1349. cbErr(tool.getReturnError("loginInfo.sdkAppID is empty", -7));
  1350. return;
  1351. }
  1352. }
  1353. if (!loginInfo.accountType) {
  1354. if (cbErr) {
  1355. cbErr(tool.getReturnError("loginInfo.accountType is empty", -8));
  1356. return;
  1357. }
  1358. }
  1359. if (loginInfo.identifier) {
  1360. ctx.identifier = loginInfo.identifier.toString();
  1361. }
  1362. if (loginInfo.identifier && !loginInfo.userSig) {
  1363. if (cbErr) {
  1364. cbErr(tool.getReturnError("loginInfo.userSig is empty", -9));
  1365. return;
  1366. }
  1367. }
  1368. if (loginInfo.userSig) {
  1369. ctx.userSig = loginInfo.userSig.toString();
  1370. }
  1371. ctx.sdkAppID = loginInfo.sdkAppID;
  1372. ctx.accountType = loginInfo.accountType;
  1373. if (ctx.identifier && ctx.userSig) {//带登录态
  1374. //登录
  1375. proto_login(
  1376. function (identifierNick) {
  1377. MsgManager.init(
  1378. listeners,
  1379. function (mmInitResp) {
  1380. if (cbOk) {
  1381. mmInitResp.identifierNick = identifierNick;
  1382. cbOk(mmInitResp);
  1383. }
  1384. }, cbErr
  1385. );
  1386. },
  1387. cbErr
  1388. );
  1389. } else {//不带登录态,进入直播场景sdk
  1390. MsgManager.init(
  1391. listeners,
  1392. cbOk,
  1393. cbErr
  1394. );
  1395. }
  1396. };
  1397. //初始化浏览器信息
  1398. var initBrowserInfo = function () {
  1399. //初始化浏览器类型
  1400. BROWSER_INFO = tool.getBrowserInfo();
  1401. log.info('BROWSER_INFO: type=' + BROWSER_INFO.type + ', ver=' + BROWSER_INFO.ver);
  1402. if (BROWSER_INFO.type == "ie") {
  1403. if (parseInt(BROWSER_INFO.ver) < 10) {
  1404. lowerBR = true;
  1405. }
  1406. }
  1407. };
  1408. //接口质量上报
  1409. var reportApiQuality = function (cmd, errorCode, errorInfo) {
  1410. if (cmd == 'longpolling' && errorCode == longPollingTimeOutErrorCode) {//longpolling 返回60008错误可以视为正常,可以不上报
  1411. return;
  1412. }
  1413. var eventId = CMD_EVENT_ID_MAP[cmd];
  1414. if (eventId) {
  1415. var reportTime = unixtime();
  1416. var uniqKey = null;
  1417. var msgCmdErrorCode = {
  1418. 'Code': errorCode,
  1419. 'ErrMsg': errorInfo
  1420. };
  1421. if (ctx.a2) {
  1422. uniqKey = ctx.a2.substring(0, 10) + "_" + reportTime + "_" + createRandom();
  1423. } else if (ctx.userSig) {
  1424. uniqKey = ctx.userSig.substring(0, 10) + "_" + reportTime + "_" + createRandom();
  1425. }
  1426. if (uniqKey) {
  1427. var rptEvtItem = {
  1428. "UniqKey": uniqKey,
  1429. "EventId": eventId,
  1430. "ReportTime": reportTime,
  1431. "MsgCmdErrorCode": msgCmdErrorCode
  1432. };
  1433. if (cmd == 'login') {
  1434. var loginApiReportItems = [];
  1435. loginApiReportItems.push(rptEvtItem);
  1436. var loginReportOpt = {
  1437. "EvtItems": loginApiReportItems,
  1438. "MainVersion": SDK.VERSION,
  1439. "Version": "0"
  1440. };
  1441. proto_reportApiQuality(loginReportOpt,
  1442. function (resp) {
  1443. loginApiReportItems = null;//
  1444. },
  1445. function (err) {
  1446. loginApiReportItems = null;//
  1447. }
  1448. );
  1449. } else {
  1450. apiReportItems.push(rptEvtItem);
  1451. if (apiReportItems.length >= maxApiReportItemCount) {//累计一定条数再上报
  1452. var reportOpt = {
  1453. "EvtItems": apiReportItems,
  1454. "MainVersion": SDK.VERSION,
  1455. "Version": "0"
  1456. };
  1457. proto_reportApiQuality(reportOpt,
  1458. function (resp) {
  1459. apiReportItems = [];//清空
  1460. },
  1461. function (err) {
  1462. apiReportItems = [];//清空
  1463. }
  1464. );
  1465. }
  1466. }
  1467. }
  1468. }
  1469. };
  1470. // REST API calls
  1471. //上线
  1472. var proto_login = function (cbOk, cbErr) {
  1473. ConnManager.apiCall(SRV_NAME.OPEN_IM, "login", { "State": "Online" },
  1474. function (loginResp) {
  1475. if (loginResp.TinyId) {
  1476. ctx.tinyid = loginResp.TinyId;
  1477. } else {
  1478. if (cbErr) {
  1479. cbErr(tool.getReturnError("TinyId is empty", -10));
  1480. return;
  1481. }
  1482. }
  1483. if (loginResp.A2Key) {
  1484. ctx.a2 = loginResp.A2Key;
  1485. } else {
  1486. if (cbErr) {
  1487. cbErr(tool.getReturnError("A2Key is empty", -11));
  1488. return;
  1489. }
  1490. }
  1491. var tag_list = [
  1492. "Tag_Profile_IM_Nick"
  1493. ];
  1494. var options = {
  1495. 'From_Account': ctx.identifier,
  1496. 'To_Account': [ctx.identifier],
  1497. 'LastStandardSequence': 0,
  1498. 'TagList': tag_list
  1499. };
  1500. proto_getProfilePortrait(
  1501. options,
  1502. function (resp) {
  1503. var nick, gender, allowType;
  1504. if (resp.UserProfileItem && resp.UserProfileItem.length > 0) {
  1505. for (var i in resp.UserProfileItem) {
  1506. for (var j in resp.UserProfileItem[i].ProfileItem) {
  1507. switch (resp.UserProfileItem[i].ProfileItem[j].Tag) {
  1508. case 'Tag_Profile_IM_Nick':
  1509. nick = resp.UserProfileItem[i].ProfileItem[j].Value;
  1510. if (nick) ctx.identifierNick = nick;
  1511. break;
  1512. }
  1513. }
  1514. }
  1515. }
  1516. if (cbOk) cbOk(ctx.identifierNick);//回传当前用户昵称
  1517. }, cbErr);
  1518. }
  1519. , cbErr);
  1520. };
  1521. //下线
  1522. var proto_logout = function (cbOk, cbErr) {
  1523. if (!checkLogin(cbErr, false)) {//不带登录态
  1524. clearSdk();
  1525. if (cbOk) cbOk({
  1526. 'ActionStatus': ACTION_STATUS.OK,
  1527. 'ErrorCode': 0,
  1528. 'ErrorInfo': 'logout success'
  1529. });
  1530. return;
  1531. }
  1532. ConnManager.apiCall(SRV_NAME.OPEN_IM, "logout", {},
  1533. function (resp) {
  1534. clearSdk();
  1535. if (cbOk) cbOk(resp);
  1536. },
  1537. cbErr);
  1538. };
  1539. //发送消息,包括私聊和群聊
  1540. var proto_sendMsg = function (msg, cbOk, cbErr) {
  1541. if (!checkLogin(cbErr, true)) return;
  1542. var msgInfo = null;
  1543. switch (msg.sess.type()) {
  1544. case SESSION_TYPE.C2C:
  1545. msgInfo = {
  1546. 'From_Account': ctx.identifier,
  1547. 'To_Account': msg.sess.id().toString(),
  1548. 'MsgTimeStamp': msg.time,
  1549. 'MsgSeq': msg.seq,
  1550. 'MsgRandom': msg.random,
  1551. 'MsgBody': []
  1552. };
  1553. break;
  1554. case SESSION_TYPE.GROUP:
  1555. var subType = msg.getSubType();
  1556. msgInfo = {
  1557. 'GroupId': msg.sess.id().toString(),
  1558. 'From_Account': ctx.identifier,
  1559. 'Random': msg.random,
  1560. 'MsgBody': []
  1561. };
  1562. switch (subType) {
  1563. case GROUP_MSG_SUB_TYPE.COMMON:
  1564. msgInfo.MsgPriority = "COMMON";
  1565. break;
  1566. case GROUP_MSG_SUB_TYPE.REDPACKET:
  1567. msgInfo.MsgPriority = "REDPACKET";
  1568. break;
  1569. case GROUP_MSG_SUB_TYPE.LOVEMSG:
  1570. msgInfo.MsgPriority = "LOVEMSG";
  1571. break;
  1572. case GROUP_MSG_SUB_TYPE.TIP:
  1573. log.error("不能主动发送群提示消息,subType=" + subType);
  1574. break;
  1575. default:
  1576. log.error("发送群消息时,出现未知子消息类型:subType=" + subType);
  1577. return;
  1578. };
  1579. break;
  1580. default:
  1581. break;
  1582. }
  1583. for (var i in msg.elems) {
  1584. var elem = msg.elems[i];
  1585. var msgContent = null;
  1586. var msgType = elem.type;
  1587. switch (msgType) {
  1588. case MSG_ELEMENT_TYPE.TEXT://文本
  1589. msgContent = { 'Text': elem.content.text };
  1590. break;
  1591. case MSG_ELEMENT_TYPE.FACE://表情
  1592. msgContent = { 'Index': elem.content.index, 'Data': elem.content.data };
  1593. break;
  1594. case MSG_ELEMENT_TYPE.IMAGE://图片
  1595. var ImageInfoArray = [];
  1596. for (var j in elem.content.ImageInfoArray) {
  1597. ImageInfoArray.push(
  1598. {
  1599. 'Type': elem.content.ImageInfoArray[j].type,
  1600. 'Size': elem.content.ImageInfoArray[j].size,
  1601. 'Width': elem.content.ImageInfoArray[j].width,
  1602. 'Height': elem.content.ImageInfoArray[j].height,
  1603. 'URL': elem.content.ImageInfoArray[j].url
  1604. }
  1605. );
  1606. }
  1607. msgContent = { 'UUID': elem.content.UUID, 'ImageInfoArray': ImageInfoArray };
  1608. break;
  1609. case MSG_ELEMENT_TYPE.SOUND://
  1610. log.warn('web端暂不支持发送语音消息');
  1611. continue;
  1612. case MSG_ELEMENT_TYPE.LOCATION://
  1613. log.warn('web端暂不支持发送地理位置消息');
  1614. continue;
  1615. case MSG_ELEMENT_TYPE.FILE://
  1616. log.warn('web端暂不支持发送语音消息');
  1617. continue;
  1618. case MSG_ELEMENT_TYPE.CUSTOM://
  1619. msgContent = { 'Data': elem.content.data, 'Desc': elem.content.desc, 'Ext': elem.content.ext };
  1620. msgType = MSG_ELEMENT_TYPE.CUSTOM;
  1621. break;
  1622. default:
  1623. log.warn('web端暂不支持发送' + elem.type + '消息');
  1624. continue;
  1625. }
  1626. msgInfo.MsgBody.push({ 'MsgType': msgType, 'MsgContent': msgContent });
  1627. }
  1628. if (msg.sess.type() == SESSION_TYPE.C2C) {//私聊
  1629. ConnManager.apiCall(SRV_NAME.OPEN_IM, "sendmsg", msgInfo, cbOk, cbErr);
  1630. } else if (msg.sess.type() == SESSION_TYPE.GROUP) {//群聊
  1631. ConnManager.apiCall(SRV_NAME.GROUP, "send_group_msg", msgInfo, cbOk, cbErr);
  1632. }
  1633. };
  1634. //长轮询接口
  1635. var proto_longPolling = function (options, cbOk, cbErr) {
  1636. if (!checkLogin(cbErr, true)) return;
  1637. ConnManager.apiCall(SRV_NAME.OPEN_IM, "longpolling", options, cbOk, cbErr, longPollingDefaultTimeOut, true);
  1638. };
  1639. //长轮询接口(拉取直播聊天室新消息)
  1640. var proto_bigGroupLongPolling = function (options, cbOk, cbErr, timeout) {
  1641. ConnManager.apiCall(SRV_NAME.BIG_GROUP_LONG_POLLING, "get_msg", options, cbOk, cbErr, timeout);
  1642. };
  1643. //拉取未读c2c消息接口
  1644. var proto_getMsgs = function (cookie, syncFlag, cbOk, cbErr) {
  1645. if (!checkLogin(cbErr, true)) return;
  1646. ConnManager.apiCall(SRV_NAME.OPEN_IM, "getmsg", { 'Cookie': cookie, 'SyncFlag': syncFlag },
  1647. function (resp) {
  1648. if (resp.MsgList && resp.MsgList.length) {
  1649. for (var i in resp.MsgList) {
  1650. tempC2CMsgList.push(resp.MsgList[i]);
  1651. }
  1652. }
  1653. if (resp.SyncFlag == 1) {
  1654. proto_getMsgs(resp.Cookie, resp.SyncFlag, cbOk, cbErr);
  1655. } else {
  1656. resp.MsgList = tempC2CMsgList;
  1657. tempC2CMsgList = [];
  1658. if (cbOk) cbOk(resp);
  1659. }
  1660. },
  1661. cbErr);
  1662. };
  1663. //C2C消息已读上报接口
  1664. var proto_c2CMsgReaded = function (cookie, c2CMsgReadedItem, cbOk, cbErr) {
  1665. if (!checkLogin(cbErr, true)) return;
  1666. var tmpC2CMsgReadedItem = [];
  1667. for (var i in c2CMsgReadedItem) {
  1668. var item = {
  1669. 'To_Account': c2CMsgReadedItem[i].toAccount,
  1670. 'LastedMsgTime': c2CMsgReadedItem[i].lastedMsgTime
  1671. };
  1672. tmpC2CMsgReadedItem.push(item);
  1673. }
  1674. ConnManager.apiCall(SRV_NAME.OPEN_IM, "msgreaded", { C2CMsgReaded: { 'Cookie': cookie, 'C2CMsgReadedItem': tmpC2CMsgReadedItem } }, cbOk, cbErr);
  1675. };
  1676. //删除c2c消息
  1677. var proto_deleteC2CMsg = function (options, cbOk, cbErr) {
  1678. if (!checkLogin(cbErr, true)) return;
  1679. ConnManager.apiCall(SRV_NAME.OPEN_IM, "deletemsg", options,
  1680. cbOk, cbErr);
  1681. };
  1682. //拉取c2c历史消息接口
  1683. var proto_getC2CHistoryMsgs = function (options, cbOk, cbErr) {
  1684. if (!checkLogin(cbErr, true)) return;
  1685. ConnManager.apiCall(SRV_NAME.OPEN_IM, "getroammsg", options,
  1686. function (resp) {
  1687. var reqMsgCount = options.MaxCnt;
  1688. var complete = resp.Complete;
  1689. var rspMsgCount = resp.MaxCnt;
  1690. var msgKey = resp.MsgKey;
  1691. var lastMsgTime = resp.LastMsgTime;
  1692. if (resp.MsgList && resp.MsgList.length) {
  1693. for (var i in resp.MsgList) {
  1694. tempC2CHistoryMsgList.push(resp.MsgList[i]);
  1695. }
  1696. }
  1697. var netxOptions = null;
  1698. if (complete == 0) {//还有历史消息可拉取
  1699. if (rspMsgCount < reqMsgCount) {
  1700. netxOptions = {
  1701. 'Peer_Account': options.Peer_Account,
  1702. 'MaxCnt': reqMsgCount - rspMsgCount,
  1703. 'LastMsgTime': lastMsgTime,
  1704. 'MsgKey': msgKey
  1705. };
  1706. }
  1707. }
  1708. if (netxOptions) {//继续拉取
  1709. proto_getC2CHistoryMsgs(netxOptions, cbOk, cbErr);
  1710. } else {
  1711. resp.MsgList = tempC2CHistoryMsgList;
  1712. tempC2CHistoryMsgList = [];
  1713. if (cbOk) cbOk(resp);
  1714. }
  1715. },
  1716. cbErr);
  1717. };
  1718. //群组接口
  1719. //创建群组
  1720. //协议参考:https://www.qcloud.com/doc/product/269/1615
  1721. var proto_createGroup = function (options, cbOk, cbErr) {
  1722. if (!checkLogin(cbErr, true)) return;
  1723. var opt = {
  1724. //必填 群组形态,包括Public(公开群),Private(私密群),ChatRoom(聊天室),AVChatRoom(互动直播聊天室)。
  1725. 'Type': options.Type,
  1726. //必填 群名称,最长30字节。
  1727. 'Name': options.Name
  1728. };
  1729. var member_list = [];
  1730. //Array 选填 初始群成员列表,最多500个。成员信息字段详情参见:群成员资料。
  1731. for (var i = 0; i < options.MemberList.length; i++) {
  1732. member_list.push({ 'Member_Account': options.MemberList[i] })
  1733. }
  1734. opt.MemberList = member_list;
  1735. //选填 为了使得群组ID更加简单,便于记忆传播,腾讯云支持APP在通过REST API创建群组时自定义群组ID。详情参见:自定义群组ID。
  1736. if (options.GroupId) {
  1737. opt.GroupId = options.GroupId;
  1738. }
  1739. //选填 群主id,自动添加到群成员中。如果不填,群没有群主。
  1740. if (options.Owner_Account) {
  1741. opt.Owner_Account = options.Owner_Account;
  1742. }
  1743. //选填 群简介,最长240字节。
  1744. if (options.Introduction) {
  1745. opt.Introduction = options.Introduction;
  1746. }
  1747. //选填 群公告,最长300字节。
  1748. if (options.Notification) {
  1749. opt.Notification = options.Notification;
  1750. }
  1751. //选填 最大群成员数量,最大为10000,不填默认为2000个。
  1752. if (options.MaxMemberCount) {
  1753. opt.MaxMemberCount = options.MaxMemberCount;
  1754. }
  1755. //选填 申请加群处理方式。包含FreeAccess(自由加入),NeedPermission(需要验证),DisableApply(禁止加群),不填默认为NeedPermission(需要验证)。
  1756. if (options.ApplyJoinOption) {//
  1757. opt.ApplyJoinOption = options.ApplyJoinOption;
  1758. }
  1759. //Array 选填 群组维度的自定义字段,默认情况是没有的,需要开通,详情参见:自定义字段。
  1760. if (options.AppDefinedData) {
  1761. opt.AppDefinedData = options.AppDefinedData;
  1762. }
  1763. //选填 群头像URL,最长100字节。
  1764. if (options.FaceUrl) {
  1765. opt.FaceUrl = options.FaceUrl;
  1766. }
  1767. ConnManager.apiCall(SRV_NAME.GROUP, "create_group", opt,
  1768. cbOk, cbErr);
  1769. };
  1770. //创建群组-高级接口
  1771. //协议参考:https://www.qcloud.com/doc/product/269/1615
  1772. var proto_createGroupHigh = function (options, cbOk, cbErr) {
  1773. if (!checkLogin(cbErr, true)) return;
  1774. ConnManager.apiCall(SRV_NAME.GROUP, "create_group", options,
  1775. cbOk, cbErr);
  1776. };
  1777. //修改群组基本资料
  1778. //协议参考:https://www.qcloud.com/doc/product/269/1620
  1779. var proto_modifyGroupBaseInfo = function (options, cbOk, cbErr) {
  1780. if (!checkLogin(cbErr, true)) return;
  1781. ConnManager.apiCall(SRV_NAME.GROUP, "modify_group_base_info", options,
  1782. cbOk, cbErr);
  1783. };
  1784. //申请加群
  1785. var proto_applyJoinGroup = function (options, cbOk, cbErr) {
  1786. if (!checkLogin(cbErr, true)) return;
  1787. ConnManager.apiCall(SRV_NAME.GROUP, "apply_join_group", {
  1788. 'GroupId': options.GroupId,
  1789. 'ApplyMsg': options.ApplyMsg,
  1790. 'UserDefinedField': options.UserDefinedField
  1791. },
  1792. cbOk, cbErr);
  1793. };
  1794. //申请加入大群
  1795. var proto_applyJoinBigGroup = function (options, cbOk, cbErr) {
  1796. var srvName;
  1797. if (!checkLogin(cbErr, false)) {//未登录
  1798. srvName = SRV_NAME.BIG_GROUP;
  1799. } else {//已登录
  1800. srvName = SRV_NAME.GROUP;
  1801. }
  1802. ConnManager.apiCall(srvName, "apply_join_group", {
  1803. 'GroupId': options.GroupId,
  1804. 'ApplyMsg': options.ApplyMsg,
  1805. 'UserDefinedField': options.UserDefinedField
  1806. },
  1807. function (resp) {
  1808. if (resp.JoinedStatus && resp.JoinedStatus == 'JoinedSuccess') {
  1809. if (resp.LongPollingKey) {
  1810. MsgManager.setBigGroupLongPollingOn(true);//开启长轮询
  1811. MsgManager.setBigGroupLongPollingKey(resp.LongPollingKey);//更新大群长轮询key
  1812. MsgManager.setBigGroupLongPollingMsgMap(options.GroupId, 0);//收到的群消息置0
  1813. MsgManager.bigGroupLongPolling();//开启长轮询
  1814. } else {//没有返回LongPollingKey,说明申请加的群不是直播聊天室(AVChatRoom)
  1815. cbErr && cbErr(tool.getReturnError("The type of group is not AVChatRoom: groupid=" + options.GroupId, -12));
  1816. return;
  1817. }
  1818. }
  1819. if (cbOk) cbOk(resp);
  1820. }
  1821. , function (err) {
  1822. if (cbErr) cbErr(err);
  1823. });
  1824. };
  1825. //处理加群申请(同意或拒绝)
  1826. var proto_handleApplyJoinGroupPendency = function (options, cbOk, cbErr) {
  1827. if (!checkLogin(cbErr, true)) return;
  1828. ConnManager.apiCall(SRV_NAME.GROUP, "handle_apply_join_group", {
  1829. 'GroupId': options.GroupId,
  1830. 'Applicant_Account': options.Applicant_Account,
  1831. 'HandleMsg': options.HandleMsg,
  1832. 'Authentication': options.Authentication,
  1833. 'MsgKey': options.MsgKey,
  1834. 'ApprovalMsg': options.ApprovalMsg,
  1835. 'UserDefinedField': options.UserDefinedField
  1836. },
  1837. cbOk,
  1838. function (err) {
  1839. if (err.ErrorCode == 10024) {//apply has be handled
  1840. if (cbOk) {
  1841. var resp = {
  1842. 'ActionStatus': ACTION_STATUS.OK,
  1843. 'ErrorCode': 0,
  1844. 'ErrorInfo': '该申请已经被处理过'
  1845. };
  1846. cbOk(resp);
  1847. }
  1848. } else {
  1849. if (cbErr) cbErr(err);
  1850. }
  1851. }
  1852. );
  1853. };
  1854. //主动退群
  1855. var proto_quitGroup = function (options, cbOk, cbErr) {
  1856. if (!checkLogin(cbErr, true)) return;
  1857. ConnManager.apiCall(SRV_NAME.GROUP, "quit_group", {
  1858. 'GroupId': options.GroupId
  1859. },
  1860. cbOk, cbErr);
  1861. };
  1862. //退出大群
  1863. var proto_quitBigGroup = function (options, cbOk, cbErr) {
  1864. var srvName;
  1865. if (!checkLogin(cbErr, false)) {//未登录
  1866. srvName = SRV_NAME.BIG_GROUP;
  1867. } else {//已登录
  1868. srvName = SRV_NAME.GROUP;
  1869. }
  1870. ConnManager.apiCall(srvName, "quit_group",
  1871. { 'GroupId': options.GroupId },
  1872. function (resp) {
  1873. //重置当前再请求中的ajax
  1874. //clearXmlHttpObjMap();
  1875. //退出大群成功之后需要重置长轮询信息
  1876. MsgManager.resetBigGroupLongPollingInfo();
  1877. if (cbOk) cbOk(resp);
  1878. },
  1879. cbErr);
  1880. };
  1881. //获取群组公开资料
  1882. var proto_getGroupPublicInfo = function (options, cbOk, cbErr) {
  1883. if (!checkLogin(cbErr, true)) return;
  1884. ConnManager.apiCall(SRV_NAME.GROUP, "get_group_public_info", {
  1885. 'GroupIdList': options.GroupIdList,
  1886. 'ResponseFilter': {
  1887. 'GroupBasePublicInfoFilter': options.GroupBasePublicInfoFilter
  1888. }
  1889. },
  1890. function (resp) {
  1891. resp.ErrorInfo = '';
  1892. if (resp.GroupInfo) {
  1893. for (var i in resp.GroupInfo) {
  1894. var errorCode = resp.GroupInfo[i].ErrorCode;
  1895. if (errorCode > 0) {
  1896. resp.ActionStatus = ACTION_STATUS.FAIL;
  1897. resp.GroupInfo[i].ErrorInfo = "[" + errorCode + "]" + resp.GroupInfo[i].ErrorInfo;
  1898. resp.ErrorInfo += resp.GroupInfo[i].ErrorInfo + '\n';
  1899. }
  1900. }
  1901. }
  1902. if (resp.ActionStatus == ACTION_STATUS.FAIL) {
  1903. if (cbErr) {
  1904. cbErr(resp);
  1905. }
  1906. } else if (cbOk) {
  1907. cbOk(resp);
  1908. }
  1909. },
  1910. cbErr);
  1911. };
  1912. //获取群组详细资料--高级
  1913. //请求协议参考:https://www.qcloud.com/doc/product/269/1616
  1914. var proto_getGroupInfo = function (options, cbOk, cbErr) {
  1915. if (!checkLogin(cbErr, true)) return;
  1916. var opt = {
  1917. 'GroupIdList': options.GroupIdList,
  1918. 'ResponseFilter': {
  1919. 'GroupBaseInfoFilter': options.GroupBaseInfoFilter,
  1920. 'MemberInfoFilter': options.MemberInfoFilter
  1921. }
  1922. };
  1923. if (options.AppDefinedDataFilter_Group) {
  1924. opt.ResponseFilter.AppDefinedDataFilter_Group = options.AppDefinedDataFilter_Group;
  1925. }
  1926. if (options.AppDefinedDataFilter_GroupMember) {
  1927. opt.ResponseFilter.AppDefinedDataFilter_GroupMember = options.AppDefinedDataFilter_GroupMember;
  1928. }
  1929. ConnManager.apiCall(SRV_NAME.GROUP, "get_group_info", opt,
  1930. cbOk, cbErr);
  1931. };
  1932. //获取群组成员-高级接口
  1933. //协议参考:https://www.qcloud.com/doc/product/269/1617
  1934. var proto_getGroupMemberInfo = function (options, cbOk, cbErr) {
  1935. if (!checkLogin(cbErr, true)) return;
  1936. ConnManager.apiCall(SRV_NAME.GROUP, "get_group_member_info", {
  1937. 'GroupId': options.GroupId,
  1938. 'Offset': options.Offset,
  1939. 'Limit': options.Limit,
  1940. 'MemberInfoFilter': options.MemberInfoFilter,
  1941. 'MemberRoleFilter': options.MemberRoleFilter,
  1942. 'AppDefinedDataFilter_GroupMember': options.AppDefinedDataFilter_GroupMember
  1943. },
  1944. cbOk, cbErr);
  1945. };
  1946. //增加群组成员
  1947. //协议参考:https://www.qcloud.com/doc/product/269/1621
  1948. var proto_addGroupMember = function (options, cbOk, cbErr) {
  1949. if (!checkLogin(cbErr, true)) return;
  1950. ConnManager.apiCall(SRV_NAME.GROUP, "add_group_member", {
  1951. 'GroupId': options.GroupId,
  1952. 'Silence': options.Silence,
  1953. 'MemberList': options.MemberList
  1954. },
  1955. cbOk, cbErr);
  1956. };
  1957. //修改群组成员资料
  1958. //协议参考:https://www.qcloud.com/doc/product/269/1623
  1959. var proto_modifyGroupMember = function (options, cbOk, cbErr) {
  1960. if (!checkLogin(cbErr, true)) return;
  1961. var opt = {};
  1962. if (options.GroupId) {
  1963. opt.GroupId = options.GroupId;
  1964. }
  1965. if (options.Member_Account) {
  1966. opt.Member_Account = options.Member_Account;
  1967. }
  1968. //Admin或者Member
  1969. if (options.Role) {
  1970. opt.Role = options.Role;
  1971. }
  1972. // AcceptAndNotify代表解收并提示消息,Discard代表不接收也不提示消息,AcceptNotNotify代表接收消息但不提示
  1973. if (options.MsgFlag) {
  1974. opt.MsgFlag = options.MsgFlag;
  1975. }
  1976. if (options.ShutUpTime) {//禁言时间
  1977. opt.ShutUpTime = options.ShutUpTime;
  1978. }
  1979. if (options.NameCard) {//群名片,最大不超过50个字节
  1980. opt.NameCard = options.NameCard;
  1981. }
  1982. if (options.AppMemberDefinedData) {//群成员维度的自定义字段,默认情况是没有的,需要开通
  1983. opt.AppMemberDefinedData = options.AppMemberDefinedData;
  1984. }
  1985. ConnManager.apiCall(SRV_NAME.GROUP, "modify_group_member_info", opt,
  1986. cbOk, cbErr);
  1987. };
  1988. //删除群组成员
  1989. //协议参考:https://www.qcloud.com/doc/product/269/1622
  1990. var proto_deleteGroupMember = function (options, cbOk, cbErr) {
  1991. if (!checkLogin(cbErr, true)) return;
  1992. ConnManager.apiCall(SRV_NAME.GROUP, "delete_group_member", {
  1993. 'GroupId': options.GroupId,
  1994. 'Silence': options.Silence,
  1995. 'MemberToDel_Account': options.MemberToDel_Account,
  1996. 'Reason': options.Reason
  1997. },
  1998. cbOk, cbErr);
  1999. };
  2000. //解散群组
  2001. //协议参考:https://www.qcloud.com/doc/product/269/1624
  2002. var proto_destroyGroup = function (options, cbOk, cbErr) {
  2003. if (!checkLogin(cbErr, true)) return;
  2004. ConnManager.apiCall(SRV_NAME.GROUP, "destroy_group", {
  2005. 'GroupId': options.GroupId
  2006. },
  2007. cbOk, cbErr);
  2008. };
  2009. //获取用户所加入的群组-高级接口
  2010. //协议参考:https://www.qcloud.com/doc/product/269/1625
  2011. var proto_getJoinedGroupListHigh = function (options, cbOk, cbErr) {
  2012. if (!checkLogin(cbErr, true)) return;
  2013. ConnManager.apiCall(SRV_NAME.GROUP, "get_joined_group_list", {
  2014. 'Member_Account': options.Member_Account,
  2015. 'Limit': options.Limit,
  2016. 'Offset': options.Offset,
  2017. 'GroupType': options.GroupType,
  2018. 'ResponseFilter': {
  2019. 'GroupBaseInfoFilter': options.GroupBaseInfoFilter,
  2020. 'SelfInfoFilter': options.SelfInfoFilter
  2021. }
  2022. },
  2023. cbOk, cbErr);
  2024. };
  2025. //查询一组UserId在群中的身份
  2026. //协议参考:https://www.qcloud.com/doc/product/269/1626
  2027. var proto_getRoleInGroup = function (options, cbOk, cbErr) {
  2028. if (!checkLogin(cbErr, true)) return;
  2029. ConnManager.apiCall(SRV_NAME.GROUP, "get_role_in_group", {
  2030. 'GroupId': options.GroupId,
  2031. 'User_Account': options.User_Account
  2032. },
  2033. cbOk, cbErr);
  2034. };
  2035. //设置取消成员禁言时间
  2036. //协议参考:https://www.qcloud.com/doc/product/269/1627
  2037. var proto_forbidSendMsg = function (options, cbOk, cbErr) {
  2038. if (!checkLogin(cbErr, true)) return;
  2039. ConnManager.apiCall(SRV_NAME.GROUP, "forbid_send_msg", {
  2040. 'GroupId': options.GroupId,
  2041. 'Members_Account': options.Members_Account,
  2042. 'ShutUpTime': options.ShutUpTime//单位为秒,为0时表示取消禁言
  2043. },
  2044. cbOk, cbErr);
  2045. };
  2046. //发送自定义群系统通知
  2047. var proto_sendCustomGroupNotify = function (options, cbOk, cbErr) {
  2048. if (!checkLogin(cbErr, true)) return;
  2049. ConnManager.apiCall(SRV_NAME.GROUP, "send_group_system_notification", options,
  2050. cbOk, cbErr);
  2051. };
  2052. //拉取群消息接口
  2053. var proto_getGroupMsgs = function (options, cbOk, cbErr) {
  2054. if (!checkLogin(cbErr, true)) return;
  2055. ConnManager.apiCall(SRV_NAME.GROUP, "group_msg_get", {
  2056. "GroupId": options.GroupId,
  2057. "ReqMsgSeq": options.ReqMsgSeq,
  2058. "ReqMsgNumber": options.ReqMsgNumber
  2059. },
  2060. cbOk, cbErr);
  2061. };
  2062. //群消息已读上报接口
  2063. var proto_groupMsgReaded = function (options, cbOk, cbErr) {
  2064. if (!checkLogin(cbErr, true)) return;
  2065. ConnManager.apiCall(SRV_NAME.GROUP, "msg_read_report", {
  2066. 'GroupId': options.GroupId,
  2067. 'MsgReadedSeq': options.MsgReadedSeq
  2068. },
  2069. cbOk, cbErr);
  2070. };
  2071. //end
  2072. //好友接口
  2073. //处理好友接口返回的错误码
  2074. var convertErrorEn2ZhFriend = function (resp) {
  2075. var errorAccount = [];
  2076. if (resp.Fail_Account && resp.Fail_Account.length) {
  2077. errorAccount = resp.Fail_Account;
  2078. }
  2079. if (resp.Invalid_Account && resp.Invalid_Account.length) {
  2080. for (var k in resp.Invalid_Account) {
  2081. errorAccount.push(resp.Invalid_Account[k]);
  2082. }
  2083. }
  2084. if (errorAccount.length) {
  2085. resp.ActionStatus = ACTION_STATUS.FAIL;
  2086. resp.ErrorCode = ERROR_CODE_CUSTOM;
  2087. resp.ErrorInfo = '';
  2088. for (var i in errorAccount) {
  2089. var failCount = errorAccount[i];
  2090. for (var j in resp.ResultItem) {
  2091. if (resp.ResultItem[j].To_Account == failCount) {
  2092. var resultCode = resp.ResultItem[j].ResultCode;
  2093. resp.ResultItem[j].ResultInfo = "[" + resultCode + "]" + resp.ResultItem[j].ResultInfo;
  2094. resp.ErrorInfo += resp.ResultItem[j].ResultInfo + "\n";
  2095. break;
  2096. }
  2097. }
  2098. }
  2099. }
  2100. return resp;
  2101. };
  2102. //添加好友
  2103. var proto_applyAddFriend = function (options, cbOk, cbErr) {
  2104. if (!checkLogin(cbErr, true)) return;
  2105. ConnManager.apiCall(SRV_NAME.FRIEND, "friend_add", {
  2106. 'From_Account': ctx.identifier,
  2107. 'AddFriendItem': options.AddFriendItem
  2108. },
  2109. function (resp) {
  2110. var newResp = convertErrorEn2ZhFriend(resp);
  2111. if (newResp.ActionStatus == ACTION_STATUS.FAIL) {
  2112. if (cbErr) cbErr(newResp);
  2113. } else if (cbOk) {
  2114. cbOk(newResp);
  2115. }
  2116. }, cbErr);
  2117. };
  2118. //删除好友
  2119. var proto_deleteFriend = function (options, cbOk, cbErr) {
  2120. if (!checkLogin(cbErr, true)) return;
  2121. ConnManager.apiCall(SRV_NAME.FRIEND, "friend_delete", {
  2122. 'From_Account': ctx.identifier,
  2123. 'To_Account': options.To_Account,
  2124. 'DeleteType': options.DeleteType
  2125. },
  2126. function (resp) {
  2127. var newResp = convertErrorEn2ZhFriend(resp);
  2128. if (newResp.ActionStatus == ACTION_STATUS.FAIL) {
  2129. if (cbErr) cbErr(newResp);
  2130. } else if (cbOk) {
  2131. cbOk(newResp);
  2132. }
  2133. }, cbErr);
  2134. };
  2135. //获取好友申请
  2136. var proto_getPendency = function (options, cbOk, cbErr) {
  2137. if (!checkLogin(cbErr, true)) return;
  2138. ConnManager.apiCall(SRV_NAME.FRIEND, "pendency_get", {
  2139. "From_Account": ctx.identifier,
  2140. "PendencyType": options.PendencyType,
  2141. "StartTime": options.StartTime,
  2142. "MaxLimited": options.MaxLimited,
  2143. "LastSequence": options.LastSequence
  2144. },
  2145. cbOk, cbErr);
  2146. };
  2147. //删除好友申请
  2148. var proto_deletePendency = function (options, cbOk, cbErr) {
  2149. if (!checkLogin(cbErr, true)) return;
  2150. ConnManager.apiCall(SRV_NAME.FRIEND, "pendency_delete", {
  2151. "From_Account": ctx.identifier,
  2152. "PendencyType": options.PendencyType,
  2153. "To_Account": options.To_Account
  2154. },
  2155. function (resp) {
  2156. var newResp = convertErrorEn2ZhFriend(resp);
  2157. if (newResp.ActionStatus == ACTION_STATUS.FAIL) {
  2158. if (cbErr) cbErr(newResp);
  2159. } else if (cbOk) {
  2160. cbOk(newResp);
  2161. }
  2162. }, cbErr);
  2163. };
  2164. //处理好友申请
  2165. var proto_responseFriend = function (options, cbOk, cbErr) {
  2166. if (!checkLogin(cbErr, true)) return;
  2167. ConnManager.apiCall(SRV_NAME.FRIEND, "friend_response", {
  2168. 'From_Account': ctx.identifier,
  2169. 'ResponseFriendItem': options.ResponseFriendItem
  2170. },
  2171. function (resp) {
  2172. var newResp = convertErrorEn2ZhFriend(resp);
  2173. if (newResp.ActionStatus == ACTION_STATUS.FAIL) {
  2174. if (cbErr) cbErr(newResp);
  2175. } else if (cbOk) {
  2176. cbOk(newResp);
  2177. }
  2178. }, cbErr);
  2179. };
  2180. //我的好友
  2181. var proto_getAllFriend = function (options, cbOk, cbErr) {
  2182. if (!checkLogin(cbErr, true)) return;
  2183. ConnManager.apiCall(SRV_NAME.FRIEND, "friend_get_all", {
  2184. 'From_Account': ctx.identifier,
  2185. 'TimeStamp': options.TimeStamp,
  2186. 'StartIndex': options.StartIndex,
  2187. 'GetCount': options.GetCount,
  2188. 'LastStandardSequence': options.LastStandardSequence,
  2189. 'TagList': options.TagList
  2190. },
  2191. cbOk, cbErr);
  2192. };
  2193. //资料接口
  2194. //查看个人资料
  2195. var proto_getProfilePortrait = function (options, cbOk, cbErr) {
  2196. if (!checkLogin(cbErr, true)) return;
  2197. ConnManager.apiCall(SRV_NAME.PROFILE, "portrait_get", {
  2198. 'From_Account': ctx.identifier,
  2199. 'To_Account': options.To_Account,
  2200. 'LastStandardSequence': options.LastStandardSequence,
  2201. 'TagList': options.TagList
  2202. },
  2203. function (resp) {
  2204. var errorAccount = [];
  2205. if (resp.Fail_Account && resp.Fail_Account.length) {
  2206. errorAccount = resp.Fail_Account;
  2207. }
  2208. if (resp.Invalid_Account && resp.Invalid_Account.length) {
  2209. for (var k in resp.Invalid_Account) {
  2210. errorAccount.push(resp.Invalid_Account[k]);
  2211. }
  2212. }
  2213. if (errorAccount.length) {
  2214. resp.ActionStatus = ACTION_STATUS.FAIL;
  2215. resp.ErrorCode = ERROR_CODE_CUSTOM;
  2216. resp.ErrorInfo = '';
  2217. for (var i in errorAccount) {
  2218. var failCount = errorAccount[i];
  2219. for (var j in resp.UserProfileItem) {
  2220. if (resp.UserProfileItem[j].To_Account == failCount) {
  2221. var resultCode = resp.UserProfileItem[j].ResultCode;
  2222. resp.UserProfileItem[j].ResultInfo = "[" + resultCode + "]" + resp.UserProfileItem[j].ResultInfo;
  2223. resp.ErrorInfo += "账号:" + failCount + "," + resp.UserProfileItem[j].ResultInfo + "\n";
  2224. break;
  2225. }
  2226. }
  2227. }
  2228. }
  2229. if (resp.ActionStatus == ACTION_STATUS.FAIL) {
  2230. if (cbErr) cbErr(resp);
  2231. } else if (cbOk) {
  2232. cbOk(resp);
  2233. }
  2234. },
  2235. cbErr);
  2236. };
  2237. //设置个人资料
  2238. var proto_setProfilePortrait = function (options, cbOk, cbErr) {
  2239. if (!checkLogin(cbErr, true)) return;
  2240. ConnManager.apiCall(SRV_NAME.PROFILE, "portrait_set",
  2241. {
  2242. 'From_Account': ctx.identifier,
  2243. 'ProfileItem': options.ProfileItem
  2244. },
  2245. function (resp) {
  2246. for (var i in options.ProfileItem) {
  2247. var profile = options.ProfileItem[i];
  2248. if (profile.Tag == 'Tag_Profile_IM_Nick') {
  2249. ctx.identifierNick = profile.Value;//更新昵称
  2250. break;
  2251. }
  2252. }
  2253. if (cbOk) cbOk(resp);
  2254. }
  2255. , cbErr);
  2256. };
  2257. //增加黑名单
  2258. var proto_addBlackList = function (options, cbOk, cbErr) {
  2259. if (!checkLogin(cbErr, true)) return;
  2260. ConnManager.apiCall(SRV_NAME.FRIEND, "black_list_add", {
  2261. 'From_Account': ctx.identifier,
  2262. 'To_Account': options.To_Account
  2263. },
  2264. function (resp) {
  2265. var newResp = convertErrorEn2ZhFriend(resp);
  2266. if (newResp.ActionStatus == ACTION_STATUS.FAIL) {
  2267. if (cbErr) cbErr(newResp);
  2268. } else if (cbOk) {
  2269. cbOk(newResp);
  2270. }
  2271. }, cbErr);
  2272. };
  2273. //删除黑名单
  2274. var proto_deleteBlackList = function (options, cbOk, cbErr) {
  2275. if (!checkLogin(cbErr, true)) return;
  2276. ConnManager.apiCall(SRV_NAME.FRIEND, "black_list_delete", {
  2277. 'From_Account': ctx.identifier,
  2278. 'To_Account': options.To_Account
  2279. },
  2280. function (resp) {
  2281. var newResp = convertErrorEn2ZhFriend(resp);
  2282. if (newResp.ActionStatus == ACTION_STATUS.FAIL) {
  2283. if (cbErr) cbErr(newResp);
  2284. } else if (cbOk) {
  2285. cbOk(newResp);
  2286. }
  2287. }, cbErr);
  2288. };
  2289. //我的黑名单
  2290. var proto_getBlackList = function (options, cbOk, cbErr) {
  2291. if (!checkLogin(cbErr, true)) return;
  2292. ConnManager.apiCall(SRV_NAME.FRIEND, "black_list_get", {
  2293. 'From_Account': ctx.identifier,
  2294. 'StartIndex': options.StartIndex,
  2295. 'MaxLimited': options.MaxLimited,
  2296. 'LastSequence': options.LastSequence
  2297. },
  2298. cbOk, cbErr);
  2299. };
  2300. //上传图片
  2301. var proto_uploadPic = function (options, cbOk, cbErr) {
  2302. if (!checkLogin(cbErr, true)) return;
  2303. if (isAccessFormalEnv()) {
  2304. cmdName = 'pic_up';
  2305. } else {
  2306. cmdName = 'pic_up_test';
  2307. }
  2308. ConnManager.apiCall(SRV_NAME.PIC, cmdName, {
  2309. 'App_Version': SDK.APPID,
  2310. 'From_Account': ctx.identifier,
  2311. 'To_Account': options.To_Account,
  2312. 'Seq': options.Seq,
  2313. 'Timestamp': options.Timestamp,
  2314. 'Random': options.Random,
  2315. 'File_Str_Md5': options.File_Str_Md5,
  2316. 'File_Size': options.File_Size,
  2317. 'Busi_Id': options.Busi_Id,
  2318. 'PkgFlag': options.PkgFlag,
  2319. 'Slice_Offset': options.Slice_Offset,
  2320. 'Slice_Size': options.Slice_Size,
  2321. 'Slice_Data': options.Slice_Data
  2322. },
  2323. cbOk, cbErr);
  2324. };
  2325. //获取语音和文件下载IP和authkey
  2326. var proto_getIpAndAuthkey = function (cbOk, cbErr) {
  2327. if (!checkLogin(cbErr, true)) return;
  2328. ConnManager.apiCall(SRV_NAME.OPEN_IM, "authkey", {}, cbOk, cbErr);
  2329. };
  2330. //接口质量上报
  2331. var proto_reportApiQuality = function (options, cbOk, cbErr) {
  2332. if (!checkLogin(cbErr, true)) return;
  2333. ConnManager.apiCall(SRV_NAME.IM_OPEN_STAT, "web_report", options, cbOk, cbErr);
  2334. };
  2335. //end
  2336. initBrowserInfo();
  2337. // singleton object ConnManager
  2338. var ConnManager = lowerBR == false
  2339. ? new function () {
  2340. var onConnCallback = null; //回调函数
  2341. this.init = function (onConnNotify, cbOk, cbErr) {
  2342. if (onConnNotify) onConnCallback = onConnNotify;
  2343. };
  2344. this.callBack = function (info) {
  2345. if (onConnCallback) onConnCallback(info);
  2346. };
  2347. this.clear = function () {
  2348. onConnCallback = null;
  2349. };
  2350. //请求后台服务接口
  2351. this.apiCall = function (type, cmd, data, cbOk, cbErr, timeout, isLongPolling) {
  2352. //封装后台服务接口地址
  2353. var url = getApiUrl(type, cmd, cbOk, cbErr);
  2354. if (url == false) return;
  2355. //发起ajax请求
  2356. ajaxRequestJson("POST", url, data, timeout, isLongPolling, function (resp) {
  2357. var errorCode = null, tempErrorInfo = '';
  2358. var info = "\n request url: \n" + url + "\n request body: \n" + JSON.stringify(data) + "\n response: \n" + JSON.stringify(resp);
  2359. //成功
  2360. if (resp.ActionStatus == ACTION_STATUS.OK) {
  2361. log.info("[" + type + "][" + cmd + "]success: " + info);
  2362. if (cbOk) cbOk(resp);//回调
  2363. errorCode = 0;
  2364. tempErrorInfo = '';
  2365. } else {
  2366. errorCode = resp.ErrorCode;
  2367. tempErrorInfo = resp.ErrorInfo;
  2368. //报错
  2369. if (cbErr) {
  2370. resp.SrcErrorInfo = resp.ErrorInfo;
  2371. resp.ErrorInfo = "[" + type + "][" + cmd + "]failed: " + info;
  2372. if (cmd != 'longpolling' || resp.ErrorCode != longPollingTimeOutErrorCode) {
  2373. log.error(resp.ErrorInfo);
  2374. }
  2375. cbErr(resp);
  2376. }
  2377. }
  2378. reportApiQuality(cmd, errorCode, tempErrorInfo);//接口质量上报
  2379. }, function (err) {
  2380. cbErr && cbErr(err);
  2381. reportApiQuality(cmd, err.ErrorCode, err.ErrorInfo);//接口质量上报
  2382. });
  2383. };
  2384. }
  2385. : new function () {
  2386. var onConnCallback = null; //回调函数
  2387. this.init = function (onConnNotify, cbOk, cbErr) {
  2388. if (onConnNotify) onConnCallback = onConnNotify;
  2389. };
  2390. this.callBack = function (info) {
  2391. if (onConnCallback) onConnCallback(info);
  2392. };
  2393. this.clear = function () {
  2394. onConnCallback = null;
  2395. };
  2396. //请求后台服务接口
  2397. this.apiCall = function (type, cmd, data, cbOk, cbErr, timeout, isLongPolling) {
  2398. //封装后台服务接口地址
  2399. var url = getApiUrl(type, cmd, cbOk, cbErr);
  2400. if (url == false) return;
  2401. //发起jsonp请求
  2402. var reqId = jsonpRequestId++,
  2403. cbkey = 'jsonpcallback', // the 'callback' key
  2404. cbval = 'jsonpRequest' + reqId, // the 'callback' value
  2405. script = document.createElement('script'),
  2406. loaded = 0;
  2407. window[cbval] = jsonpCallback;
  2408. script.type = 'text/javascript';
  2409. url = url + "&" + cbkey + "=" + cbval + "&jsonpbody=" + encodeURIComponent(JSON.stringify(data));
  2410. script.src = url;
  2411. script.async = true;
  2412. if (typeof script.onreadystatechange !== 'undefined') {
  2413. // need this for IE due to out-of-order onreadystatechange(), binding script
  2414. // execution to an event listener gives us control over when the script
  2415. // is executed. See http://jaubourg.net/2010/07/loading-script-as-onclick-handler-of.html
  2416. script.event = 'onclick';
  2417. script.htmlFor = script.id = '_jsonpRequest_' + reqId;
  2418. }
  2419. script.onload = script.onreadystatechange = function () {
  2420. if ((this.readyState && this.readyState !== 'complete' && this.readyState !== 'loaded') || loaded) {
  2421. return false;
  2422. }
  2423. script.onload = script.onreadystatechange = null;
  2424. script.onclick && script.onclick();
  2425. // Call the user callback with the last value stored and clean up values and scripts.
  2426. var resp = jsonpLastRspData;
  2427. var info = "\n request url: \n" + url + "\n request body: \n" + JSON.stringify(data) + "\n response: \n" + JSON.stringify(resp);
  2428. if (resp.ActionStatus == ACTION_STATUS.OK) {
  2429. log.info("[" + type + "][" + cmd + "]success: " + info);
  2430. cbOk && cbOk(resp);
  2431. } else {
  2432. resp.ErrorInfo = "[" + type + "][" + cmd + "]failed " + info;
  2433. if (cmd != 'longpolling' || resp.ErrorCode != longPollingTimeOutErrorCode) {
  2434. log.error(resp.ErrorInfo);
  2435. } else {
  2436. log.warn("[" + type + "][" + cmd + "]success: " + info);
  2437. }
  2438. cbErr && cbErr(resp);
  2439. }
  2440. jsonpLastRspData = undefined;
  2441. document.body.removeChild(script);
  2442. loaded = 1;
  2443. };
  2444. // Add the script to the DOM head
  2445. document.body.appendChild(script);
  2446. };
  2447. };
  2448. // class Session
  2449. var Session = function (type, id, name, icon, time, seq) {
  2450. this._impl = {
  2451. skey: Session.skey(type, id),
  2452. type: type,
  2453. id: id,
  2454. name: name,
  2455. icon: icon,
  2456. unread: 0,//未读消息数
  2457. isAutoRead: false,
  2458. time: time >= 0 ? time : 0,
  2459. curMaxMsgSeq: seq >= 0 ? seq : 0,
  2460. msgs: []
  2461. };
  2462. };
  2463. Session.skey = function (type, id) {
  2464. return type + id;
  2465. };
  2466. Session.prototype.type = function () { return this._impl.type; };
  2467. Session.prototype.id = function () { return this._impl.id; };
  2468. Session.prototype.name = function () { return this._impl.name; };
  2469. Session.prototype.icon = function () { return this._impl.icon; };
  2470. Session.prototype.unread = function () { return this._impl.unread; };
  2471. Session.prototype.time = function () { return this._impl.time; };
  2472. Session.prototype.curMaxMsgSeq = function () { return this._impl.curMaxMsgSeq; };
  2473. Session.prototype.msgCount = function () { return this._impl.msgs.length; };
  2474. Session.prototype.msg = function (index) { return this._impl.msgs[index]; };
  2475. Session.prototype._impl_addMsg = function (msg) {
  2476. this._impl.msgs.push(msg);
  2477. //if (!msg.isSend && msg.time > this._impl.time)
  2478. if (msg.time > this._impl.time)
  2479. this._impl.time = msg.time;
  2480. //if (!msg.isSend && msg.seq > this._impl.curMaxMsgSeq)
  2481. if (msg.seq > this._impl.curMaxMsgSeq)
  2482. this._impl.curMaxMsgSeq = msg.seq;
  2483. //自己发送的消息不计入未读数
  2484. if (!msg.isSend && !this._impl.isAutoRead) {
  2485. this._impl.unread++;
  2486. }
  2487. };
  2488. //class C2CMsgReadedItem
  2489. var C2CMsgReadedItem = function (toAccount, lastedMsgTime) {
  2490. this.toAccount = toAccount;
  2491. this.lastedMsgTime = lastedMsgTime;
  2492. };
  2493. // class Msg
  2494. var Msg = function (sess, isSend, seq, random, time, fromAccount, subType, fromAccountNick) {
  2495. this.sess = sess;
  2496. this.subType = subType >= 0 ? subType : 0;//消息类型,c2c消息时,type取值为0;group消息时,type取值0和1,0-普通群消息,1-群提示消息
  2497. this.fromAccount = fromAccount;
  2498. this.fromAccountNick = fromAccountNick ? fromAccountNick : fromAccount;
  2499. this.isSend = Boolean(isSend);
  2500. this.seq = seq >= 0 ? seq : nextSeq();
  2501. this.random = random >= 0 ? random : createRandom();
  2502. this.time = time >= 0 ? time : unixtime();
  2503. this.elems = [];
  2504. };
  2505. Msg.prototype.getSession = function () {
  2506. return this.sess;
  2507. };
  2508. Msg.prototype.getType = function () {
  2509. return this.subType;
  2510. };
  2511. Msg.prototype.getSubType = function () {
  2512. return this.subType;
  2513. };
  2514. Msg.prototype.getFromAccount = function () {
  2515. return this.fromAccount;
  2516. };
  2517. Msg.prototype.getFromAccountNick = function () {
  2518. return this.fromAccountNick;
  2519. };
  2520. Msg.prototype.getIsSend = function () {
  2521. return this.isSend;
  2522. };
  2523. Msg.prototype.getSeq = function () {
  2524. return this.seq;
  2525. };
  2526. Msg.prototype.getTime = function () {
  2527. return this.time;
  2528. };
  2529. Msg.prototype.getRandom = function () {
  2530. return this.random;
  2531. };
  2532. Msg.prototype.getElems = function () {
  2533. return this.elems;
  2534. };
  2535. //文本
  2536. Msg.prototype.addText = function (text) {
  2537. this.addElem(new webim.Msg.Elem(MSG_ELEMENT_TYPE.TEXT, text));
  2538. };
  2539. //表情
  2540. Msg.prototype.addFace = function (face) {
  2541. this.addElem(new webim.Msg.Elem(MSG_ELEMENT_TYPE.FACE, face));
  2542. };
  2543. //图片
  2544. Msg.prototype.addImage = function (image) {
  2545. this.addElem(new webim.Msg.Elem(MSG_ELEMENT_TYPE.IMAGE, image));
  2546. };
  2547. //自定义
  2548. Msg.prototype.addCustom = function (custom) {
  2549. this.addElem(new webim.Msg.Elem(MSG_ELEMENT_TYPE.CUSTOM, custom));
  2550. };
  2551. Msg.prototype.addElem = function (elem) {
  2552. this.elems.push(elem);
  2553. };
  2554. Msg.prototype.toHtml = function () {
  2555. var html = "";
  2556. for (var i in this.elems) {
  2557. var elem = this.elems[i];
  2558. html += elem.toHtml();
  2559. }
  2560. return html;
  2561. };
  2562. // class Msg.Elem
  2563. Msg.Elem = function (type, value) {
  2564. this.type = type;
  2565. this.content = value;
  2566. };
  2567. Msg.Elem.prototype.getType = function () {
  2568. return this.type;
  2569. };
  2570. Msg.Elem.prototype.getContent = function () {
  2571. return this.content;
  2572. };
  2573. Msg.Elem.prototype.toHtml = function () {
  2574. var html;
  2575. html = this.content.toHtml();
  2576. return html;
  2577. };
  2578. // class Msg.Elem.Text
  2579. Msg.Elem.Text = function (text) {
  2580. this.text = tool.xssFilter(text);
  2581. };
  2582. Msg.Elem.Text.prototype.getText = function () {
  2583. return this.text;
  2584. };
  2585. Msg.Elem.Text.prototype.toHtml = function () {
  2586. return this.text;
  2587. };
  2588. // class Msg.Elem.Face
  2589. Msg.Elem.Face = function (index, data) {
  2590. this.index = index;
  2591. this.data = data;
  2592. };
  2593. Msg.Elem.Face.prototype.getIndex = function () {
  2594. return this.index;
  2595. };
  2596. Msg.Elem.Face.prototype.getData = function () {
  2597. return this.data;
  2598. };
  2599. Msg.Elem.Face.prototype.toHtml = function () {
  2600. var emotion = emotions[this.index];
  2601. if (emotion && emotion[1]) {
  2602. return "<img src='" + emotion[1] + "'/>";
  2603. } else {
  2604. return this.data;
  2605. }
  2606. };
  2607. //图片消息
  2608. // class Msg.Elem.Images
  2609. Msg.Elem.Images = function (imageId) {
  2610. this.UUID = imageId;
  2611. this.ImageInfoArray = [];
  2612. };
  2613. Msg.Elem.Images.prototype.addImage = function (image) {
  2614. this.ImageInfoArray.push(image);
  2615. };
  2616. Msg.Elem.Images.prototype.toHtml = function () {
  2617. var smallImage = this.getImage(IMAGE_TYPE.SMALL);
  2618. var bigImage = this.getImage(IMAGE_TYPE.LARGE);
  2619. var oriImage = this.getImage(IMAGE_TYPE.ORIGIN);
  2620. if (!bigImage) {
  2621. bigImage = smallImage;
  2622. }
  2623. if (!oriImage) {
  2624. oriImage = smallImage;
  2625. }
  2626. return "<img src='" + smallImage.getUrl() + "#" + bigImage.getUrl() + "#" + oriImage.getUrl() + "' style='CURSOR: hand' id='" + this.getImageId() + "' bigImgUrl='" + bigImage.getUrl() + "' onclick='imageClick(this)' />";
  2627. };
  2628. Msg.Elem.Images.prototype.getImageId = function () {
  2629. return this.UUID;
  2630. };
  2631. Msg.Elem.Images.prototype.getImage = function (type) {
  2632. for (var i in this.ImageInfoArray) {
  2633. if (this.ImageInfoArray[i].getType() == type) {
  2634. return this.ImageInfoArray[i];
  2635. }
  2636. }
  2637. return null;
  2638. };
  2639. // class Msg.Elem.Images.Image
  2640. Msg.Elem.Images.Image = function (type, size, width, height, url) {
  2641. this.type = type;
  2642. this.size = size;
  2643. this.width = width;
  2644. this.height = height;
  2645. this.url = url;
  2646. };
  2647. Msg.Elem.Images.Image.prototype.getType = function () {
  2648. return this.type;
  2649. };
  2650. Msg.Elem.Images.Image.prototype.getSize = function () {
  2651. return this.size;
  2652. };
  2653. Msg.Elem.Images.Image.prototype.getWidth = function () {
  2654. return this.width;
  2655. };
  2656. Msg.Elem.Images.Image.prototype.getHeight = function () {
  2657. return this.height;
  2658. };
  2659. Msg.Elem.Images.Image.prototype.getUrl = function () {
  2660. return this.url;
  2661. };
  2662. // class Msg.Elem.Sound
  2663. Msg.Elem.Sound = function (uuid, second, size, senderId, downUrl) {
  2664. this.uuid = uuid;//语音id
  2665. this.second = second;//时长,单位:秒
  2666. this.size = size;//大小,单位:字节
  2667. this.senderId = senderId;//发送者id
  2668. this.downUrl = downUrl;//下载url
  2669. };
  2670. Msg.Elem.Sound.prototype.getUUID = function () {
  2671. return this.uuid;
  2672. };
  2673. Msg.Elem.Sound.prototype.getSecond = function () {
  2674. return this.second;
  2675. };
  2676. Msg.Elem.Sound.prototype.getSize = function () {
  2677. return this.size;
  2678. };
  2679. Msg.Elem.Sound.prototype.getSenderId = function () {
  2680. return this.senderId;
  2681. };
  2682. Msg.Elem.Sound.prototype.getDownUrl = function () {
  2683. return this.downUrl;
  2684. };
  2685. Msg.Elem.Sound.prototype.toHtml = function () {
  2686. if (BROWSER_INFO.type == 'ie' && parseInt(BROWSER_INFO.ver) <= 8) {
  2687. return '[这是一条语音消息]demo暂不支持ie8(含)以下浏览器播放语音,语音URL:' + this.downUrl;
  2688. }
  2689. return '<audio src="' + this.downUrl + '" controls="controls" onplay="onChangePlayAudio(this)" preload="none"></audio>';
  2690. };
  2691. // class Msg.Elem.File
  2692. Msg.Elem.File = function (uuid, name, size, senderId, downUrl) {
  2693. this.uuid = uuid;//文件id
  2694. this.name = name;//文件名
  2695. this.size = size;//大小,单位:字节
  2696. this.senderId = senderId;//发送者
  2697. this.downUrl = downUrl;//下载地址
  2698. };
  2699. Msg.Elem.File.prototype.getUUID = function () {
  2700. return this.uuid;
  2701. };
  2702. Msg.Elem.File.prototype.getName = function () {
  2703. return this.name;
  2704. };
  2705. Msg.Elem.File.prototype.getSize = function () {
  2706. return this.size;
  2707. };
  2708. Msg.Elem.File.prototype.getSenderId = function () {
  2709. return this.senderId;
  2710. };
  2711. Msg.Elem.File.prototype.getDownUrl = function () {
  2712. return this.downUrl;
  2713. };
  2714. Msg.Elem.File.prototype.toHtml = function () {
  2715. var fileSize = Math.round(this.size / 1024);
  2716. return '<a href="' + this.downUrl + '" title="点击下载文件" ><i class="glyphicon glyphicon-file">&nbsp;' + this.name + '(' + fileSize + 'KB)</i></a>';
  2717. };
  2718. // class Msg.Elem.GroupTip 群提示消息对象
  2719. Msg.Elem.GroupTip = function (opType, opUserId, groupId, groupName, userIdList, memberInfo) {
  2720. this.opType = opType;//操作类型
  2721. this.opUserId = opUserId;//操作者id
  2722. this.opUserInfo = null;//操作者 info
  2723. this.groupId = groupId;//群id
  2724. this.groupName = groupName;//群名称
  2725. this.userIdList = userIdList ? userIdList : [];//被操作的用户id列表
  2726. this.userInfoList = [];
  2727. this.groupInfoList = [];//新的群资料信息,群资料变更时才有值
  2728. this.memberInfoList = [];//新的群成员资料信息,群成员资料变更时才有值
  2729. this.groupMemberNum = null;//群成员数,操作类型为加群或者退群时才有值
  2730. this.opUserInfo = new Msg.Elem.GroupTip.UserInfo(memberInfo.User_Account, memberInfo.NickName);
  2731. };
  2732. Msg.Elem.GroupTip.prototype.addGroupInfo = function (groupInfo) {
  2733. this.groupInfoList.push(groupInfo);
  2734. };
  2735. Msg.Elem.GroupTip.prototype.addMemberInfo = function (memberInfo) {
  2736. this.memberInfoList.push(memberInfo);
  2737. };
  2738. Msg.Elem.GroupTip.prototype.addUserInfo = function (userInfo) {
  2739. this.userInfoList.push(userInfo);
  2740. };
  2741. Msg.Elem.GroupTip.prototype.getOpType = function () {
  2742. return this.opType;
  2743. };
  2744. Msg.Elem.GroupTip.prototype.getOpUserId = function () {
  2745. return this.opUserId;
  2746. };
  2747. Msg.Elem.GroupTip.prototype.getOpUserInfo = function () {
  2748. return this.opUserInfo;
  2749. };
  2750. Msg.Elem.GroupTip.prototype.getGroupId = function () {
  2751. return this.groupId;
  2752. };
  2753. Msg.Elem.GroupTip.prototype.getGroupName = function () {
  2754. return this.groupName;
  2755. };
  2756. Msg.Elem.GroupTip.prototype.getUserIdList = function () {
  2757. return this.userIdList;
  2758. };
  2759. Msg.Elem.GroupTip.prototype.getUserInfoList = function () {
  2760. return this.userInfoList;
  2761. };
  2762. Msg.Elem.GroupTip.prototype.getMemberExtraInfo = function () {
  2763. return this.memberExtraInfo;
  2764. };
  2765. Msg.Elem.GroupTip.prototype.getGroupInfoList = function () {
  2766. return this.groupInfoList;
  2767. };
  2768. Msg.Elem.GroupTip.prototype.getMemberInfoList = function () {
  2769. return this.memberInfoList;
  2770. };
  2771. Msg.Elem.GroupTip.prototype.getGroupMemberNum = function () {
  2772. return this.groupMemberNum;
  2773. };
  2774. Msg.Elem.GroupTip.prototype.setGroupMemberNum = function (groupMemberNum) {
  2775. return this.groupMemberNum = groupMemberNum;
  2776. };
  2777. Msg.Elem.GroupTip.prototype.toHtml = function () {
  2778. var text = "[群提示消息]";
  2779. var maxIndex = GROUP_TIP_MAX_USER_COUNT - 1;
  2780. switch (this.opType) {
  2781. case GROUP_TIP_TYPE.JOIN://加入群
  2782. text += this.opUserId + "邀请了";
  2783. for (var m in this.userIdList) {
  2784. text += this.userIdList[m] + ",";
  2785. if (this.userIdList.length > GROUP_TIP_MAX_USER_COUNT && m == maxIndex) {
  2786. text += "等" + this.userIdList.length + "人";
  2787. break;
  2788. }
  2789. }
  2790. text += "加入该群";
  2791. break;
  2792. case GROUP_TIP_TYPE.QUIT://退出群
  2793. text += this.opUserId + "主动退出该群";
  2794. break;
  2795. case GROUP_TIP_TYPE.KICK://踢出群
  2796. text += this.opUserId + "将";
  2797. for (var m in this.userIdList) {
  2798. text += this.userIdList[m] + ",";
  2799. if (this.userIdList.length > GROUP_TIP_MAX_USER_COUNT && m == maxIndex) {
  2800. text += "等" + this.userIdList.length + "人";
  2801. break;
  2802. }
  2803. }
  2804. text += "踢出该群";
  2805. break;
  2806. case GROUP_TIP_TYPE.SET_ADMIN://设置管理员
  2807. text += this.opUserId + "将";
  2808. for (var m in this.userIdList) {
  2809. text += this.userIdList[m] + ",";
  2810. if (this.userIdList.length > GROUP_TIP_MAX_USER_COUNT && m == maxIndex) {
  2811. text += "等" + this.userIdList.length + "人";
  2812. break;
  2813. }
  2814. }
  2815. text += "设为管理员";
  2816. break;
  2817. case GROUP_TIP_TYPE.CANCEL_ADMIN://取消管理员
  2818. text += this.opUserId + "取消";
  2819. for (var m in this.userIdList) {
  2820. text += this.userIdList[m] + ",";
  2821. if (this.userIdList.length > GROUP_TIP_MAX_USER_COUNT && m == maxIndex) {
  2822. text += "等" + this.userIdList.length + "人";
  2823. break;
  2824. }
  2825. }
  2826. text += "的管理员资格";
  2827. break;
  2828. case GROUP_TIP_TYPE.MODIFY_GROUP_INFO://群资料变更
  2829. text += this.opUserId + "修改了群资料:";
  2830. for (var m in this.groupInfoList) {
  2831. var type = this.groupInfoList[m].getType();
  2832. var value = this.groupInfoList[m].getValue();
  2833. switch (type) {
  2834. case GROUP_TIP_MODIFY_GROUP_INFO_TYPE.FACE_URL:
  2835. text += "群头像为" + value + "; ";
  2836. break;
  2837. case GROUP_TIP_MODIFY_GROUP_INFO_TYPE.NAME:
  2838. text += "群名称为" + value + "; ";
  2839. break;
  2840. case GROUP_TIP_MODIFY_GROUP_INFO_TYPE.OWNER:
  2841. text += "群主为" + value + "; ";
  2842. break;
  2843. case GROUP_TIP_MODIFY_GROUP_INFO_TYPE.NOTIFICATION:
  2844. text += "群公告为" + value + "; ";
  2845. break;
  2846. case GROUP_TIP_MODIFY_GROUP_INFO_TYPE.INTRODUCTION:
  2847. text += "群简介为" + value + "; ";
  2848. break;
  2849. default:
  2850. text += "未知信息为:type=" + type + ",value=" + value + "; ";
  2851. break;
  2852. }
  2853. }
  2854. break;
  2855. case GROUP_TIP_TYPE.MODIFY_MEMBER_INFO://群成员资料变更(禁言时间)
  2856. text += this.opUserId + "修改了群成员资料:";
  2857. for (var m in this.memberInfoList) {
  2858. var userId = this.memberInfoList[m].getUserId();
  2859. var shutupTime = this.memberInfoList[m].getShutupTime();
  2860. text += userId + ": ";
  2861. if (shutupTime != null && shutupTime !== undefined) {
  2862. if (shutupTime == 0) {
  2863. text += "取消禁言; ";
  2864. } else {
  2865. text += "禁言" + shutupTime + "秒; ";
  2866. }
  2867. } else {
  2868. text += " shutupTime为空";
  2869. }
  2870. if (this.memberInfoList.length > GROUP_TIP_MAX_USER_COUNT && m == maxIndex) {
  2871. text += "等" + this.memberInfoList.length + "人";
  2872. break;
  2873. }
  2874. }
  2875. break;
  2876. default:
  2877. text += "未知群提示消息类型:type=" + this.opType;
  2878. break;
  2879. }
  2880. return text;
  2881. };
  2882. // class Msg.Elem.GroupTip.GroupInfo,变更的群资料信息对象
  2883. Msg.Elem.GroupTip.GroupInfo = function (type, value) {
  2884. this.type = type;//群资料信息类型
  2885. this.value = value;//对应的值
  2886. };
  2887. Msg.Elem.GroupTip.GroupInfo.prototype.getType = function () {
  2888. return this.type;
  2889. };
  2890. Msg.Elem.GroupTip.GroupInfo.prototype.getValue = function () {
  2891. return this.value;
  2892. };
  2893. // class Msg.Elem.GroupTip.MemberInfo,变更的群成员资料信息对象
  2894. Msg.Elem.GroupTip.MemberInfo = function (userId, shutupTime) {
  2895. this.userId = userId;//群成员id
  2896. this.shutupTime = shutupTime;//群成员被禁言时间,0表示取消禁言,大于0表示被禁言时长,单位:秒
  2897. };
  2898. Msg.Elem.GroupTip.MemberInfo.prototype.getUserId = function () {
  2899. return this.userId;
  2900. };
  2901. Msg.Elem.GroupTip.MemberInfo.prototype.getShutupTime = function () {
  2902. return this.shutupTime;
  2903. };
  2904. Msg.Elem.GroupTip.UserInfo = function (userId, nickname) {
  2905. this.userId = userId;//群成员id
  2906. this.nickname = nickname;
  2907. };
  2908. Msg.Elem.GroupTip.UserInfo.prototype.getUserId = function () {
  2909. return this.userId;
  2910. };
  2911. Msg.Elem.GroupTip.UserInfo.prototype.getNickname = function () {
  2912. return this.nickname;
  2913. };
  2914. // 自定义消息类型 class Msg.Elem.Custom
  2915. Msg.Elem.Custom = function (data, desc, ext) {
  2916. this.data = data;//数据
  2917. this.desc = desc;//描述
  2918. this.ext = ext;//扩展字段
  2919. };
  2920. Msg.Elem.Custom.prototype.getData = function () {
  2921. return this.data;
  2922. };
  2923. Msg.Elem.Custom.prototype.getDesc = function () {
  2924. return this.desc;
  2925. };
  2926. Msg.Elem.Custom.prototype.getExt = function () {
  2927. return this.ext;
  2928. };
  2929. Msg.Elem.Custom.prototype.toHtml = function () {
  2930. return this.data;
  2931. };
  2932. // singleton object MsgStore
  2933. var MsgStore = new function () {
  2934. var sessMap = {};//跟所有用户或群的聊天记录MAP
  2935. var sessTimeline = [];//按时间降序排列的会话列表
  2936. var msgCache = {};//消息缓存,用于判重
  2937. //C2C
  2938. this.cookie = "";//上一次拉取新c2c消息的cookie
  2939. this.syncFlag = 0;//上一次拉取新c2c消息的是否继续拉取标记
  2940. var visitSess = function (visitor) {
  2941. for (var i in sessMap) {
  2942. visitor(sessMap[i]);
  2943. }
  2944. };
  2945. //消息查重
  2946. var checkDupMsg = function (msg) {
  2947. var dup = false;
  2948. var first_key = msg.sess._impl.skey;
  2949. var second_key = msg.isSend + msg.seq + msg.random;
  2950. var tempMsg = msgCache[first_key] && msgCache[first_key][second_key];
  2951. if (tempMsg && Math.abs(msg.time - tempMsg.time) < 1800)
  2952. dup = true;
  2953. if (msgCache[first_key]) {
  2954. msgCache[first_key][second_key] = { time: msg.time };
  2955. } else {
  2956. msgCache[first_key] = {};
  2957. msgCache[first_key][second_key] = { time: msg.time };
  2958. }
  2959. return dup;
  2960. };
  2961. this.sessMap = function () {
  2962. return sessMap;
  2963. };
  2964. this.sessCount = function () {
  2965. return sessTimeline.length;
  2966. };
  2967. this.sessByTypeId = function (type, id) {
  2968. var skey = Session.skey(type, id);
  2969. if (skey === 'undefined' || skey == null) return null;
  2970. return sessMap[skey];
  2971. };
  2972. this.delSessByTypeId = function (type, id) {
  2973. var skey = Session.skey(type, id);
  2974. if (skey === 'undefined' || skey == null) return false;
  2975. if (sessMap[skey]) {
  2976. delete sessMap[skey];
  2977. delete msgCache[skey];
  2978. }
  2979. return true;
  2980. };
  2981. this.resetCookieAndSyncFlag = function () {
  2982. this.cookie = "";
  2983. this.syncFlag = 0;
  2984. };
  2985. //切换将当前会话的自动读取消息标志为isOn,重置其他会话的自动读取消息标志为false
  2986. this.setAutoRead = function (selSess, isOn, isResetAll) {
  2987. if (isResetAll)
  2988. visitSess(function (s) { s._impl.isAutoRead = false; });
  2989. if (selSess) {
  2990. selSess._impl.isAutoRead = isOn;//
  2991. if (isOn) {//是否调用已读上报接口
  2992. selSess._impl.unread = 0;
  2993. if (selSess._impl.type == SESSION_TYPE.C2C) {//私聊消息已读上报
  2994. var tmpC2CMsgReadedItem = [];
  2995. tmpC2CMsgReadedItem.push(new C2CMsgReadedItem(selSess._impl.id, selSess._impl.time));
  2996. //调用C2C消息已读上报接口
  2997. proto_c2CMsgReaded(MsgStore.cookie,
  2998. tmpC2CMsgReadedItem,
  2999. function (resp) {
  3000. log.info("[setAutoRead]: c2CMsgReaded success");
  3001. },
  3002. function (err) {
  3003. log.error("[setAutoRead}: c2CMsgReaded failed:" + err.ErrorInfo);
  3004. });
  3005. } else if (selSess._impl.type == SESSION_TYPE.GROUP) {//群聊消息已读上报
  3006. var tmpOpt = {
  3007. 'GroupId': selSess._impl.id,
  3008. 'MsgReadedSeq': selSess._impl.curMaxMsgSeq
  3009. };
  3010. //调用group消息已读上报接口
  3011. proto_groupMsgReaded(tmpOpt,
  3012. function (resp) {
  3013. log.info("groupMsgReaded success");
  3014. },
  3015. function (err) {
  3016. log.error("groupMsgReaded failed:" + err.ErrorInfo);
  3017. });
  3018. }
  3019. }
  3020. }
  3021. };
  3022. this.c2CMsgReaded = function (opts, cbOk, cbErr) {
  3023. var tmpC2CMsgReadedItem = [];
  3024. tmpC2CMsgReadedItem.push(new C2CMsgReadedItem(opts.To_Account, opts.LastedMsgTime));
  3025. //调用C2C消息已读上报接口
  3026. proto_c2CMsgReaded(MsgStore.cookie,
  3027. tmpC2CMsgReadedItem,
  3028. function (resp) {
  3029. if (cbOk) {
  3030. log.info("c2CMsgReaded success");
  3031. cbOk(resp);
  3032. }
  3033. },
  3034. function (err) {
  3035. if (cbErr) {
  3036. log.error("c2CMsgReaded failed:" + err.ErrorInfo);
  3037. cbErr(err);
  3038. }
  3039. });
  3040. };
  3041. this.addSession = function (sess) {
  3042. sessMap[sess._impl.skey] = sess;
  3043. };
  3044. this.delSession = function (sess) {
  3045. delete sessMap[sess._impl.skey];
  3046. };
  3047. this.addMsg = function (msg) {
  3048. if (checkDupMsg(msg)) return false;
  3049. var sess = msg.sess;
  3050. if (!sessMap[sess._impl.skey]) this.addSession(sess);
  3051. sess._impl_addMsg(msg);
  3052. return true;
  3053. };
  3054. this.updateTimeline = function () {
  3055. var arr = new Array;
  3056. visitSess(function (sess) { arr.push(sess); });
  3057. arr.sort(function (a, b) { return b.time - a.time; });
  3058. sessTimeline = arr;
  3059. };
  3060. };
  3061. // singleton object MsgManager
  3062. var MsgManager = new function () {
  3063. var onMsgCallback = null;//新消息(c2c和group)回调
  3064. var onGroupInfoChangeCallback = null;//群资料变化回调
  3065. //收到新群系统消息回调列表
  3066. var onGroupSystemNotifyCallbacks = {
  3067. "1": null,
  3068. "2": null,
  3069. "3": null,
  3070. "4": null,
  3071. "5": null,
  3072. "6": null,
  3073. "7": null,
  3074. "8": null,
  3075. "9": null,
  3076. "10": null,
  3077. "11": null,
  3078. "255": null
  3079. };
  3080. //监听好友系统通知函数
  3081. var onGroupFriendNotifyCallbacks = {
  3082. "1": null,
  3083. "2": null,
  3084. "3": null,
  3085. "4": null,
  3086. "5": null,
  3087. "6": null,
  3088. "7": null,
  3089. "8": null
  3090. };
  3091. //普通长轮询
  3092. var longPollingOn = false;//是否开启普通长轮询
  3093. var isLongPollingRequesting = false;//是否在长轮询ing
  3094. var notifySeq = 0;//c2c通知seq
  3095. var noticeSeq = 0;//群消息seq
  3096. //大群长轮询
  3097. var onBigGroupMsgCallback = null;//大群消息回调
  3098. var bigGroupLongPollingOn = false;//是否开启长轮询
  3099. var bigGroupLongPollingStartSeq = 0;//请求拉消息的起始seq(大群长轮询)
  3100. var bigGroupLongPollingHoldTime = 90;//客户端长轮询的超时时间,单位是秒(大群长轮询)
  3101. var bigGroupLongPollingKey = null;//客户端加入群组后收到的的Key(大群长轮询)
  3102. var bigGroupLongPollingMsgMap = {};//记录收到的群消息数
  3103. var ipList = [];//文件下载地址
  3104. var authkey = null;//文件下载票据
  3105. var expireTime = null;//票据超时时间
  3106. var getLostGroupMsgCount = 0;//补拉丢失的群消息次数
  3107. //我的群当前最大的seq
  3108. var myGroupMaxSeqs = {};//用于补拉丢失的群消息
  3109. var groupSystemMsgsCache = {};//群组系统消息缓存,用于判重
  3110. //设置长轮询开关
  3111. //isOn=true 开启
  3112. //isOn=false 停止
  3113. this.setLongPollingOn = function (isOn) {
  3114. longPollingOn = isOn;
  3115. };
  3116. this.getLongPollingOn = function () {
  3117. return longPollingOn;
  3118. };
  3119. //重置长轮询变量
  3120. this.resetLongPollingInfo = function () {
  3121. longPollingOn = false;
  3122. notifySeq = 0;
  3123. noticeSeq = 0;
  3124. };
  3125. //设置大群长轮询开关
  3126. //isOn=true 开启
  3127. //isOn=false 停止
  3128. this.setBigGroupLongPollingOn = function (isOn) {
  3129. bigGroupLongPollingOn = isOn;
  3130. };
  3131. //设置大群长轮询key
  3132. this.setBigGroupLongPollingKey = function (key) {
  3133. bigGroupLongPollingKey = key;
  3134. };
  3135. //重置大群长轮询变量
  3136. this.resetBigGroupLongPollingInfo = function () {
  3137. bigGroupLongPollingOn = false;
  3138. bigGroupLongPollingStartSeq = 0;
  3139. bigGroupLongPollingKey = null;
  3140. bigGroupLongPollingMsgMap = {};
  3141. };
  3142. //设置群消息数据条数
  3143. this.setBigGroupLongPollingMsgMap = function (groupId, count) {
  3144. var bigGroupLongPollingMsgCount = bigGroupLongPollingMsgMap[groupId];
  3145. if (bigGroupLongPollingMsgCount) {
  3146. bigGroupLongPollingMsgCount = parseInt(bigGroupLongPollingMsgCount) + count;
  3147. bigGroupLongPollingMsgMap[groupId] = bigGroupLongPollingMsgCount;
  3148. } else {
  3149. bigGroupLongPollingMsgMap[groupId] = count;
  3150. }
  3151. };
  3152. //重置
  3153. this.clear = function () {
  3154. onGroupInfoChangeCallback = null;
  3155. onGroupSystemNotifyCallbacks = {
  3156. "1": null,//申请加群请求(只有管理员会收到)
  3157. "2": null,//申请加群被同意(只有申请人能够收到)
  3158. "3": null,//申请加群被拒绝(只有申请人能够收到)
  3159. "4": null,//被管理员踢出群(只有被踢者接收到)
  3160. "5": null,//群被解散(全员接收)
  3161. "6": null,//创建群(创建者接收)
  3162. "7": null,//邀请加群(被邀请者接收)
  3163. "8": null,//主动退群(主动退出者接收)
  3164. "9": null,//设置管理员(被设置者接收)
  3165. "10": null,//取消管理员(被取消者接收)
  3166. "11": null,//群已被回收(全员接收)
  3167. "255": null//用户自定义通知(默认全员接收)
  3168. };
  3169. onFriendSystemNotifyCallbacks = {
  3170. "1": null,//好友表增加
  3171. "2": null,//好友表删除
  3172. "3": null,//未决增加
  3173. "4": null,//未决删除
  3174. "5": null,//黑名单增加
  3175. "6": null,//黑名单删除
  3176. "7": null,//未决已读上报
  3177. "8": null//好友信息(备注,分组)变更
  3178. };
  3179. onProfileSystemNotifyCallbacks = {
  3180. "1": null//资料修改
  3181. };
  3182. //重置普通长轮询参数
  3183. onMsgCallback = null;
  3184. longPollingOn = false;
  3185. notifySeq = 0;//c2c新消息通知seq
  3186. noticeSeq = 0;//group新消息seq
  3187. //重置大群长轮询参数
  3188. onBigGroupMsgCallback = null;
  3189. bigGroupLongPollingOn = false;
  3190. bigGroupLongPollingStartSeq = 0;
  3191. bigGroupLongPollingKey = null;
  3192. bigGroupLongPollingMsgMap = {};
  3193. groupSystemMsgsCache = {};
  3194. ipList = [];//文件下载地址
  3195. authkey = null;//文件下载票据
  3196. expireTime = null;//票据超时时间
  3197. };
  3198. //初始化文件下载ip和票据
  3199. var initIpAndAuthkey = function (cbOk, cbErr) {
  3200. proto_getIpAndAuthkey(function (resp) {
  3201. ipList = resp.IpList;
  3202. authkey = resp.AuthKey;
  3203. expireTime = resp.ExpireTime;
  3204. if (cbOk) cbOk(resp);
  3205. },
  3206. function (err) {
  3207. log.error("initIpAndAuthkey failed:" + err.ErrorInfo);
  3208. if (cbErr) cbErr(err);
  3209. }
  3210. );
  3211. };
  3212. //初始化我的群当前最大的seq,用于补拉丢失的群消息
  3213. var initMyGroupMaxSeqs = function (cbOk, cbErr) {
  3214. var opts = {
  3215. 'Member_Account': ctx.identifier,
  3216. 'Limit': 1000,
  3217. 'Offset': 0,
  3218. 'GroupBaseInfoFilter': [
  3219. 'NextMsgSeq'
  3220. ]
  3221. };
  3222. proto_getJoinedGroupListHigh(opts, function (resp) {
  3223. if (!resp.GroupIdList || resp.GroupIdList.length == 0) {
  3224. log.info("initMyGroupMaxSeqs: 目前还没有加入任何群组");
  3225. if (cbOk) cbOk(resp);
  3226. return;
  3227. }
  3228. for (var i = 0; i < resp.GroupIdList.length; i++) {
  3229. var group_id = resp.GroupIdList[i].GroupId;
  3230. var curMaxSeq = resp.GroupIdList[i].NextMsgSeq - 1;
  3231. myGroupMaxSeqs[group_id] = curMaxSeq;
  3232. }
  3233. if (cbOk) cbOk(resp);
  3234. },
  3235. function (err) {
  3236. log.error("initMyGroupMaxSeqs failed:" + err.ErrorInfo);
  3237. if (cbErr) cbErr(err);
  3238. }
  3239. );
  3240. };
  3241. //补拉群消息
  3242. var getLostGroupMsgs = function (groupId, reqMsgSeq, reqMsgNumber) {
  3243. getLostGroupMsgCount++;
  3244. //发起一个拉群群消息请求
  3245. var tempOpts = {
  3246. 'GroupId': groupId,
  3247. 'ReqMsgSeq': reqMsgSeq,
  3248. 'ReqMsgNumber': reqMsgNumber
  3249. };
  3250. //发起一个拉群群消息请求
  3251. log.warn("第" + getLostGroupMsgCount + "次补齐群消息,参数=" + JSON.stringify(tempOpts));
  3252. MsgManager.syncGroupMsgs(tempOpts);
  3253. };
  3254. //添加群消息列表
  3255. var addGroupMsgList = function (msgs, new_group_msgs) {
  3256. for (var p in msgs) {
  3257. var newGroupMsg = msgs[p];
  3258. //发群消息时,长轮询接口会返回用户自己发的群消息,如果收到自己发的群消息,则不要处理
  3259. //if(newGroupMsg.From_Account && newGroupMsg.From_Account!=ctx.identifier ){
  3260. if (newGroupMsg.From_Account) {
  3261. var msg = handlerGroupMsg(newGroupMsg, false, true);
  3262. if (msg) {
  3263. new_group_msgs.push(msg);
  3264. }
  3265. }
  3266. }
  3267. return new_group_msgs;
  3268. };
  3269. //处理收到的群普通和提示消息
  3270. var handlerOrdinaryAndTipGroupMsgs = function (eventType, groupMsgArray) {
  3271. var groupMsgMap = {};//
  3272. var new_group_msgs = [];
  3273. var minGroupMsgSeq = 99999999;
  3274. var maxGroupMsgSeq = -1;
  3275. for (var j in groupMsgArray) {
  3276. var groupMsgs = groupMsgMap[groupMsgArray[j].ToGroupId];
  3277. if (!groupMsgs) {
  3278. groupMsgs = groupMsgMap[groupMsgArray[j].ToGroupId] = {
  3279. "min": minGroupMsgSeq,//收到新消息最小seq
  3280. "max": maxGroupMsgSeq,//收到新消息最大seq
  3281. "msgs": []//收到的新消息
  3282. };
  3283. }
  3284. //更新noticeseq
  3285. if (groupMsgArray[j].NoticeSeq > noticeSeq) {
  3286. log.warn("noticeSeq=" + noticeSeq + ",msgNoticeSeq=" + groupMsgArray[j].NoticeSeq);
  3287. noticeSeq = groupMsgArray[j].NoticeSeq;
  3288. }
  3289. groupMsgArray[j].Event = eventType;
  3290. groupMsgMap[groupMsgArray[j].ToGroupId].msgs.push(groupMsgArray[j]);
  3291. if (groupMsgArray[j].MsgSeq < groupMsgs.min) {
  3292. groupMsgMap[groupMsgArray[j].ToGroupId].min = groupMsgArray[j].MsgSeq;
  3293. }
  3294. if (groupMsgArray[j].MsgSeq > groupMsgs.max) {
  3295. groupMsgMap[groupMsgArray[j].ToGroupId].max = groupMsgArray[j].MsgSeq;
  3296. }
  3297. }
  3298. for (var groupId in groupMsgMap) {
  3299. var tempCount = groupMsgMap[groupId].max - groupMsgMap[groupId].min + 1;
  3300. var curMaxMsgSeq = myGroupMaxSeqs[groupId];
  3301. if (curMaxMsgSeq) {//存在这个群的最大消息seq
  3302. //高并发情况下,长轮询可能存在丢消息,这时需要客户端通过拉取群消息接口补齐下
  3303. //1、如果收到的新消息最小seq比当前最大群消息seq大于1,则表示收到的群消息发生跳跃,需要补齐
  3304. //2、收到的新群消息seq存在不连续情况,也需要补齐
  3305. if (groupMsgMap[groupId].min - curMaxMsgSeq > 1 || groupMsgMap[groupId].msgs.length < tempCount) {
  3306. //发起一个拉群群消息请求
  3307. log.warn("发起一次补齐群消息请求,curMaxMsgSeq=" + curMaxMsgSeq + ", minMsgSeq=" + groupMsgMap[groupId].min + ", maxMsgSeq=" + groupMsgMap[groupId].max + ", msgs.length=" + groupMsgMap[groupId].msgs.length + ", tempCount=" + tempCount);
  3308. getLostGroupMsgs(groupId, groupMsgMap[groupId].max, groupMsgMap[groupId].max - curMaxMsgSeq);
  3309. } else {
  3310. new_group_msgs = addGroupMsgList(groupMsgMap[groupId].msgs, new_group_msgs);
  3311. }
  3312. } else {//不存在改群的最大消息seq
  3313. log.warn("不存在该群的最大消息seq,群id=" + groupId);
  3314. //高并发情况下,长轮询可能存在丢消息,这时需要客户端通过拉取群消息接口补齐下
  3315. //1、收到的新群消息seq存在不连续情况,也需要补齐
  3316. if (groupMsgMap[groupId].msgs.length < tempCount) {
  3317. //发起一个拉群群消息请求
  3318. log.warn("发起一次补齐群消息请求,minMsgSeq=" + groupMsgMap[groupId].min + ", maxMsgSeq=" + groupMsgMap[groupId].max + ", msgs.length=" + groupMsgMap[groupId].msgs.length + ", tempCount=" + tempCount);
  3319. getLostGroupMsgs(groupId, groupMsgMap[groupId].max, tempCount);
  3320. } else {
  3321. new_group_msgs = addGroupMsgList(groupMsgMap[groupId].msgs, new_group_msgs);
  3322. }
  3323. }
  3324. }
  3325. if (new_group_msgs.length) {
  3326. MsgStore.updateTimeline();
  3327. }
  3328. if (onMsgCallback && new_group_msgs.length) onMsgCallback(new_group_msgs);
  3329. };
  3330. //处理新的群提示消息
  3331. var handlerGroupTips = function (groupTips) {
  3332. var new_group_msgs = [];
  3333. for (var o in groupTips) {
  3334. var groupTip = groupTips[o];
  3335. //添加event字段
  3336. groupTip.Event = LONG_POLLINNG_EVENT_TYPE.GROUP_TIP;
  3337. //更新群消息通知seq
  3338. if (groupTip.NoticeSeq > noticeSeq) {
  3339. noticeSeq = groupTip.NoticeSeq;
  3340. }
  3341. var msg = handlerGroupMsg(groupTip, false, true);
  3342. if (msg) {
  3343. new_group_msgs.push(msg);
  3344. }
  3345. }
  3346. if (new_group_msgs.length) {
  3347. MsgStore.updateTimeline();
  3348. }
  3349. if (onMsgCallback && new_group_msgs.length) onMsgCallback(new_group_msgs);
  3350. };
  3351. //处理新的群系统消息
  3352. //isNeedValidRepeatMsg 是否需要判重
  3353. var handlerGroupSystemMsgs = function (groupSystemMsgs, isNeedValidRepeatMsg) {
  3354. for (var k in groupSystemMsgs) {
  3355. var groupTip = groupSystemMsgs[k];
  3356. var groupReportTypeMsg = groupTip.MsgBody;
  3357. var reportType = groupReportTypeMsg.ReportType;
  3358. //当长轮询返回的群系统消息,才需要更新群消息通知seq
  3359. if (isNeedValidRepeatMsg == false && groupTip.NoticeSeq && groupTip.NoticeSeq > noticeSeq) {
  3360. noticeSeq = groupTip.NoticeSeq;
  3361. }
  3362. var toAccount = groupTip.GroupInfo.To_Account;
  3363. //过滤本不应该给自己的系统消息
  3364. if (!toAccount || toAccount != ctx.identifier) {
  3365. log.error("收到本不应该给自己的系统消息: To_Account=" + toAccount);
  3366. continue;
  3367. }
  3368. if (isNeedValidRepeatMsg) {
  3369. //var key=groupTip.ToGroupId+"_"+reportType+"_"+groupTip.MsgTimeStamp+"_"+groupReportTypeMsg.Operator_Account;
  3370. var key = groupTip.ToGroupId + "_" + reportType + "_" + groupReportTypeMsg.Operator_Account;
  3371. var isExist = groupSystemMsgsCache[key];
  3372. if (isExist) {
  3373. log.warn("收到重复的群系统消息:key=" + key);
  3374. continue;
  3375. }
  3376. groupSystemMsgsCache[key] = true;
  3377. }
  3378. var notify = {
  3379. "SrcFlag": 0,
  3380. "ReportType": reportType,
  3381. "GroupId": groupTip.ToGroupId,
  3382. "GroupName": groupTip.GroupInfo.GroupName,
  3383. "Operator_Account": groupReportTypeMsg.Operator_Account,
  3384. "MsgTime": groupTip.MsgTimeStamp
  3385. };
  3386. switch (reportType) {
  3387. case GROUP_SYSTEM_TYPE.JOIN_GROUP_REQUEST://申请加群(只有管理员会接收到)
  3388. notify["RemarkInfo"] = groupReportTypeMsg.RemarkInfo;
  3389. notify["MsgKey"] = groupReportTypeMsg.MsgKey;
  3390. notify["Authentication"] = groupReportTypeMsg.Authentication;
  3391. notify["UserDefinedField"] = groupTip.UserDefinedField;
  3392. notify["From_Account"] = groupTip.From_Account;
  3393. notify["MsgSeq"] = groupTip.ClientSeq;
  3394. notify["MsgRandom"] = groupTip.MsgRandom;
  3395. break;
  3396. case GROUP_SYSTEM_TYPE.JOIN_GROUP_ACCEPT://申请加群被同意(只有申请人自己接收到)
  3397. case GROUP_SYSTEM_TYPE.JOIN_GROUP_REFUSE://申请加群被拒绝(只有申请人自己接收到)
  3398. notify["RemarkInfo"] = groupReportTypeMsg.RemarkInfo;
  3399. break;
  3400. case GROUP_SYSTEM_TYPE.KICK://被管理员踢出群(只有被踢者接收到)
  3401. case GROUP_SYSTEM_TYPE.DESTORY://群被解散(全员接收)
  3402. case GROUP_SYSTEM_TYPE.CREATE://创建群(创建者接收, 不展示)
  3403. case GROUP_SYSTEM_TYPE.INVITED_JOIN_GROUP_REQUEST://邀请加群(被邀请者接收)
  3404. case GROUP_SYSTEM_TYPE.QUIT://主动退群(主动退出者接收, 不展示)
  3405. case GROUP_SYSTEM_TYPE.SET_ADMIN://群设置管理员(被设置者接收)
  3406. case GROUP_SYSTEM_TYPE.CANCEL_ADMIN://取消管理员(被取消者接收)
  3407. case GROUP_SYSTEM_TYPE.REVOKE://群已被回收(全员接收, 不展示)
  3408. break;
  3409. case GROUP_SYSTEM_TYPE.CUSTOM://用户自定义通知(默认全员接收)
  3410. notify["MsgSeq"] = groupTip.MsgSeq;
  3411. notify["UserDefinedField"] = groupReportTypeMsg.UserDefinedField;
  3412. break;
  3413. default:
  3414. log.error("未知群系统消息类型:reportType=" + reportType);
  3415. break;
  3416. }
  3417. if (isNeedValidRepeatMsg) {
  3418. if (reportType == GROUP_SYSTEM_TYPE.JOIN_GROUP_REQUEST) {
  3419. //回调
  3420. if (onGroupSystemNotifyCallbacks[reportType]) onGroupSystemNotifyCallbacks[reportType](notify);
  3421. }
  3422. } else {
  3423. //回调
  3424. if (onGroupSystemNotifyCallbacks[reportType]) onGroupSystemNotifyCallbacks[reportType](notify);
  3425. }
  3426. }//loop
  3427. };
  3428. //处理新的好友系统通知
  3429. //isNeedValidRepeatMsg 是否需要判重
  3430. var handlerFriendSystemNotices = function (friendSystemNotices, isNeedValidRepeatMsg) {
  3431. var friendNotice, type, notify;
  3432. for (var k in friendSystemNotices) {
  3433. friendNotice = friendSystemNotices[k];
  3434. type = friendNotice.PushType;
  3435. //当长轮询返回的群系统消息,才需要更新通知seq
  3436. if (isNeedValidRepeatMsg == false && friendNotice.NoticeSeq && friendNotice.NoticeSeq > noticeSeq) {
  3437. noticeSeq = friendNotice.NoticeSeq;
  3438. }
  3439. notify = { 'Type': type };
  3440. switch (type) {
  3441. case FRIEND_NOTICE_TYPE.FRIEND_ADD://好友表增加
  3442. notify["Accounts"] = friendNotice.FriendAdd_Account;
  3443. break;
  3444. case FRIEND_NOTICE_TYPE.FRIEND_DELETE://好友表删除
  3445. notify["Accounts"] = friendNotice.FriendDel_Account;
  3446. break;
  3447. case FRIEND_NOTICE_TYPE.PENDENCY_ADD://未决增加
  3448. notify["PendencyList"] = friendNotice.PendencyAdd;
  3449. break;
  3450. case FRIEND_NOTICE_TYPE.PENDENCY_DELETE://未决删除
  3451. notify["Accounts"] = friendNotice.FrienPencydDel_Account;
  3452. break;
  3453. case FRIEND_NOTICE_TYPE.BLACK_LIST_ADD://黑名单增加
  3454. notify["Accounts"] = friendNotice.BlackListAdd_Account;
  3455. break;
  3456. case FRIEND_NOTICE_TYPE.BLACK_LIST_DELETE://黑名单删除
  3457. notify["Accounts"] = friendNotice.BlackListDel_Account;
  3458. break;
  3459. /*case FRIEND_NOTICE_TYPE.PENDENCY_REPORT://未决已读上报
  3460. break;
  3461. case FRIEND_NOTICE_TYPE.FRIEND_UPDATE://好友数据更新
  3462. break;
  3463. */
  3464. default:
  3465. log.error("未知好友系统通知类型:friendNotice=" + JSON.stringify(friendNotice));
  3466. break;
  3467. }
  3468. if (isNeedValidRepeatMsg) {
  3469. if (type == FRIEND_NOTICE_TYPE.PENDENCY_ADD) {
  3470. //回调
  3471. if (onFriendSystemNotifyCallbacks[type]) onFriendSystemNotifyCallbacks[type](notify);
  3472. }
  3473. } else {
  3474. //回调
  3475. if (onFriendSystemNotifyCallbacks[type]) onFriendSystemNotifyCallbacks[type](notify);
  3476. }
  3477. }//loop
  3478. };
  3479. //处理新的资料系统通知
  3480. //isNeedValidRepeatMsg 是否需要判重
  3481. var handlerProfileSystemNotices = function (profileSystemNotices, isNeedValidRepeatMsg) {
  3482. var profileNotice, type, notify;
  3483. for (var k in profileSystemNotices) {
  3484. profileNotice = profileSystemNotices[k];
  3485. type = profileNotice.PushType;
  3486. //当长轮询返回的群系统消息,才需要更新通知seq
  3487. if (isNeedValidRepeatMsg == false && profileNotice.NoticeSeq && profileNotice.NoticeSeq > noticeSeq) {
  3488. noticeSeq = profileNotice.NoticeSeq;
  3489. }
  3490. notify = { 'Type': type };
  3491. switch (type) {
  3492. case PROFILE_NOTICE_TYPE.PROFILE_MODIFY://资料修改
  3493. notify["Profile_Account"] = profileNotice.Profile_Account;
  3494. notify["ProfileList"] = profileNotice.ProfileList;
  3495. break;
  3496. default:
  3497. log.error("未知资料系统通知类型:profileNotice=" + JSON.stringify(profileNotice));
  3498. break;
  3499. }
  3500. if (isNeedValidRepeatMsg) {
  3501. if (type == PROFILE_NOTICE_TYPE.PROFILE_MODIFY) {
  3502. //回调
  3503. if (onProfileSystemNotifyCallbacks[type]) onProfileSystemNotifyCallbacks[type](notify);
  3504. }
  3505. } else {
  3506. //回调
  3507. if (onProfileSystemNotifyCallbacks[type]) onProfileSystemNotifyCallbacks[type](notify);
  3508. }
  3509. }//loop
  3510. };
  3511. //处理新的群系统消息(用于直播大群长轮询)
  3512. var handlerGroupSystemMsg = function (groupTip) {
  3513. var groupReportTypeMsg = groupTip.MsgBody;
  3514. var reportType = groupReportTypeMsg.ReportType;
  3515. var toAccount = groupTip.GroupInfo.To_Account;
  3516. //过滤本不应该给自己的系统消息
  3517. //if(!toAccount || toAccount!=ctx.identifier){
  3518. // log.error("收到本不应该给自己的系统消息: To_Account="+toAccount);
  3519. // continue;
  3520. //}
  3521. var notify = {
  3522. "SrcFlag": 1,
  3523. "ReportType": reportType,
  3524. "GroupId": groupTip.ToGroupId,
  3525. "GroupName": groupTip.GroupInfo.GroupName,
  3526. "Operator_Account": groupReportTypeMsg.Operator_Account,
  3527. "MsgTime": groupTip.MsgTimeStamp
  3528. };
  3529. switch (reportType) {
  3530. case GROUP_SYSTEM_TYPE.JOIN_GROUP_REQUEST://申请加群(只有管理员会接收到)
  3531. notify["RemarkInfo"] = groupReportTypeMsg.RemarkInfo;
  3532. notify["MsgKey"] = groupReportTypeMsg.MsgKey;
  3533. notify["Authentication"] = groupReportTypeMsg.Authentication;
  3534. notify["UserDefinedField"] = groupTip.UserDefinedField;
  3535. notify["From_Account"] = groupTip.From_Account;
  3536. notify["MsgSeq"] = groupTip.ClientSeq;
  3537. notify["MsgRandom"] = groupTip.MsgRandom;
  3538. break;
  3539. case GROUP_SYSTEM_TYPE.JOIN_GROUP_ACCEPT://申请加群被同意(只有申请人自己接收到)
  3540. case GROUP_SYSTEM_TYPE.JOIN_GROUP_REFUSE://申请加群被拒绝(只有申请人自己接收到)
  3541. notify["RemarkInfo"] = groupReportTypeMsg.RemarkInfo;
  3542. break;
  3543. case GROUP_SYSTEM_TYPE.KICK://被管理员踢出群(只有被踢者接收到)
  3544. case GROUP_SYSTEM_TYPE.DESTORY://群被解散(全员接收)
  3545. case GROUP_SYSTEM_TYPE.CREATE://创建群(创建者接收, 不展示)
  3546. case GROUP_SYSTEM_TYPE.INVITED_JOIN_GROUP_REQUEST://邀请加群(被邀请者接收)
  3547. case GROUP_SYSTEM_TYPE.QUIT://主动退群(主动退出者接收, 不展示)
  3548. case GROUP_SYSTEM_TYPE.SET_ADMIN://群设置管理员(被设置者接收)
  3549. case GROUP_SYSTEM_TYPE.CANCEL_ADMIN://取消管理员(被取消者接收)
  3550. case GROUP_SYSTEM_TYPE.REVOKE://群已被回收(全员接收, 不展示)
  3551. break;
  3552. case GROUP_SYSTEM_TYPE.CUSTOM://用户自定义通知(默认全员接收)
  3553. notify["MsgSeq"] = groupTip.MsgSeq;
  3554. notify["UserDefinedField"] = groupReportTypeMsg.UserDefinedField;
  3555. break;
  3556. default:
  3557. log.error("未知群系统消息类型:reportType=" + reportType);
  3558. break;
  3559. }
  3560. //回调
  3561. if (onGroupSystemNotifyCallbacks[reportType]) onGroupSystemNotifyCallbacks[reportType](notify);
  3562. };
  3563. //长轮询
  3564. this.longPolling = function (cbOk, cbErr) {
  3565. var opts = {
  3566. 'Timeout': 90,
  3567. 'Cookie': {
  3568. 'NotifySeq': notifySeq,
  3569. 'NoticeSeq': noticeSeq
  3570. }
  3571. };
  3572. proto_longPolling(opts, function (resp) {
  3573. for (var i in resp.EventArray) {
  3574. var e = resp.EventArray[i];
  3575. switch (e.Event) {
  3576. case LONG_POLLINNG_EVENT_TYPE.C2C://c2c消息通知
  3577. //更新C2C消息通知seq
  3578. notifySeq = e.NotifySeq;
  3579. log.warn("longpolling: received new c2c msg");
  3580. //获取新消息
  3581. MsgManager.syncMsgs();
  3582. break;
  3583. case LONG_POLLINNG_EVENT_TYPE.GROUP_COMMON://普通群消息通知
  3584. log.warn("longpolling: received new group msgs");
  3585. handlerOrdinaryAndTipGroupMsgs(e.Event, e.GroupMsgArray);
  3586. break;
  3587. case LONG_POLLINNG_EVENT_TYPE.GROUP_TIP://(全员广播)群提示消息
  3588. log.warn("longpolling: received new group tips");
  3589. handlerOrdinaryAndTipGroupMsgs(e.Event, e.GroupTips);
  3590. break;
  3591. case LONG_POLLINNG_EVENT_TYPE.GROUP_SYSTEM://(多终端同步)群系统消息
  3592. log.warn("longpolling: received new group system msgs");
  3593. //false 表示 通过长轮询收到的群系统消息,可以不判重
  3594. handlerGroupSystemMsgs(e.GroupTips, false);
  3595. break;
  3596. case LONG_POLLINNG_EVENT_TYPE.FRIEND_NOTICE://好友系统通知
  3597. log.warn("longpolling: received new friend system notice");
  3598. //false 表示 通过长轮询收到的好友系统通知,可以不判重
  3599. handlerFriendSystemNotices(e.FriendListMod, false);
  3600. break;
  3601. case LONG_POLLINNG_EVENT_TYPE.PROFILE_NOTICE://资料系统通知
  3602. log.warn("longpolling: received new profile system notice");
  3603. //false 表示 通过长轮询收到的资料系统通知,可以不判重
  3604. handlerProfileSystemNotices(e.ProfileDataMod, false);
  3605. break;
  3606. default:
  3607. log.error("longpolling收到未知新消息类型: Event=" + e.Event);
  3608. break;
  3609. }
  3610. }
  3611. var successInfo = {
  3612. 'ActionStatus': ACTION_STATUS.OK,
  3613. 'ErrorCode': 0
  3614. };
  3615. updatecLongPollingStatus(successInfo);
  3616. }, function (err) {
  3617. //log.error(err);
  3618. updatecLongPollingStatus(err);
  3619. if (cbErr) cbErr(err);
  3620. });
  3621. };
  3622. //大群 长轮询
  3623. this.bigGroupLongPolling = function (cbOk, cbErr) {
  3624. var opts = {
  3625. 'StartSeq': bigGroupLongPollingStartSeq,//请求拉消息的起始seq
  3626. 'HoldTime': bigGroupLongPollingHoldTime,//客户端长轮询的超时时间,单位是秒
  3627. 'Key': bigGroupLongPollingKey//客户端加入群组后收到的的Key
  3628. };
  3629. proto_bigGroupLongPolling(opts, function (resp) {
  3630. var msgObjList = [];
  3631. bigGroupLongPollingStartSeq = resp.NextSeq;
  3632. bigGroupLongPollingHoldTime = resp.HoldTime;
  3633. bigGroupLongPollingKey = resp.Key;
  3634. if (resp.RspMsgList && resp.RspMsgList.length > 0) {
  3635. var msgCount = 0, msgInfo, event, msg;
  3636. for (var i = resp.RspMsgList.length - 1; i >= 0; i--) {
  3637. msgInfo = resp.RspMsgList[i];
  3638. //如果是已经删除的消息或者发送者帐号为空或者消息内容为空
  3639. //IsPlaceMsg=1
  3640. if (msgInfo.IsPlaceMsg || !msgInfo.From_Account || !msgInfo.MsgBody || msgInfo.MsgBody.length == 0) {
  3641. continue;
  3642. }
  3643. event = msgInfo.Event;//群消息类型
  3644. switch (event) {
  3645. case LONG_POLLINNG_EVENT_TYPE.GROUP_COMMON://群普通消息
  3646. log.info("bigGroupLongPolling: return new group msg");
  3647. msg = handlerGroupMsg(msgInfo, false, false);
  3648. msg && msgObjList.push(msg);
  3649. msgCount = msgCount + 1;
  3650. break;
  3651. case LONG_POLLINNG_EVENT_TYPE.GROUP_TIP://群提示消息
  3652. case LONG_POLLINNG_EVENT_TYPE.GROUP_TIP2://群提示消息
  3653. log.info("bigGroupLongPolling: return new group tip");
  3654. msg = handlerGroupMsg(msgInfo, false, false);
  3655. msg && msgObjList.push(msg);
  3656. //msgCount=msgCount+1;
  3657. break;
  3658. case LONG_POLLINNG_EVENT_TYPE.GROUP_SYSTEM://群系统消息
  3659. log.info("bigGroupLongPolling: new group system msg");
  3660. handlerGroupSystemMsg(msgInfo);
  3661. break;
  3662. default:
  3663. log.error("bigGroupLongPolling收到未知新消息类型: Event=" + event);
  3664. break;
  3665. }
  3666. } // for loop
  3667. if (msgCount > 0) {
  3668. MsgManager.setBigGroupLongPollingMsgMap(msgInfo.ToGroupId, msgCount);//
  3669. log.warn("current bigGroupLongPollingMsgMap: " + JSON.stringify(bigGroupLongPollingMsgMap));
  3670. }
  3671. }
  3672. curBigGroupLongPollingRetErrorCount = 0;
  3673. //返回连接状态
  3674. var successInfo = {
  3675. 'ActionStatus': ACTION_STATUS.OK,
  3676. 'ErrorCode': CONNECTION_STATUS.ON,
  3677. 'ErrorInfo': 'connection is ok...'
  3678. };
  3679. ConnManager.callBack(successInfo);
  3680. if (cbOk) cbOk(msgObjList);
  3681. else if (onBigGroupMsgCallback) onBigGroupMsgCallback(msgObjList);//返回新消息
  3682. //重新启动长轮询
  3683. bigGroupLongPollingOn && MsgManager.bigGroupLongPolling();
  3684. }, function (err) {
  3685. //
  3686. if (err.ErrorCode != longPollingTimeOutErrorCode) {
  3687. log.error(err.ErrorInfo);
  3688. //记录长轮询返回错误次数
  3689. curBigGroupLongPollingRetErrorCount++;
  3690. }
  3691. //累计超过一定次数,不再发起长轮询请求
  3692. if (curBigGroupLongPollingRetErrorCount < LONG_POLLING_MAX_RET_ERROR_COUNT) {
  3693. bigGroupLongPollingOn && MsgManager.bigGroupLongPolling();
  3694. } else {
  3695. var errInfo = {
  3696. 'ActionStatus': ACTION_STATUS.FAIL,
  3697. 'ErrorCode': CONNECTION_STATUS.OFF,
  3698. 'ErrorInfo': 'connection is off'
  3699. };
  3700. ConnManager.callBack(errInfo);
  3701. }
  3702. if (cbErr) cbErr(err);
  3703. }, bigGroupLongPollingHoldTime * 1000);
  3704. };
  3705. //更新连接状态
  3706. var updatecLongPollingStatus = function (errObj) {
  3707. if (errObj.ErrorCode == 0 || errObj.ErrorCode == longPollingTimeOutErrorCode) {
  3708. curLongPollingRetErrorCount = 0;
  3709. longPollingOffCallbackFlag = false;
  3710. var errorInfo;
  3711. var isNeedCallback = false;
  3712. switch (curLongPollingStatus) {
  3713. case CONNECTION_STATUS.INIT:
  3714. isNeedCallback = true;
  3715. curLongPollingStatus = CONNECTION_STATUS.ON;
  3716. errorInfo = "create connection successfully(INIT->ON)";
  3717. break;
  3718. case CONNECTION_STATUS.ON:
  3719. errorInfo = "connection is on...(ON->ON)";
  3720. break;
  3721. case CONNECTION_STATUS.RECONNECT:
  3722. curLongPollingStatus = CONNECTION_STATUS.ON;
  3723. errorInfo = "connection is on...(RECONNECT->ON)";
  3724. break;
  3725. case CONNECTION_STATUS.OFF:
  3726. isNeedCallback = true;
  3727. curLongPollingStatus = CONNECTION_STATUS.RECONNECT;
  3728. errorInfo = "reconnect successfully(OFF->RECONNECT)";
  3729. break;
  3730. }
  3731. var successInfo = {
  3732. 'ActionStatus': ACTION_STATUS.OK,
  3733. 'ErrorCode': curLongPollingStatus,
  3734. 'ErrorInfo': errorInfo
  3735. };
  3736. isNeedCallback && ConnManager.callBack(successInfo);
  3737. longPollingOn && MsgManager.longPolling();
  3738. } else {
  3739. //记录长轮询返回解析json错误次数
  3740. curLongPollingRetErrorCount++;
  3741. log.warn("longPolling接口第" + curLongPollingRetErrorCount + "次报错: " + errObj.ErrorInfo);
  3742. //累计超过一定次数
  3743. if (curLongPollingRetErrorCount <= LONG_POLLING_MAX_RET_ERROR_COUNT) {
  3744. setTimeout(startNextLongPolling, 100);//
  3745. } else {
  3746. curLongPollingStatus = CONNECTION_STATUS.OFF;
  3747. var errInfo = {
  3748. 'ActionStatus': ACTION_STATUS.FAIL,
  3749. 'ErrorCode': CONNECTION_STATUS.OFF,
  3750. 'ErrorInfo': 'connection is off'
  3751. };
  3752. longPollingOffCallbackFlag == false && ConnManager.callBack(errInfo);
  3753. longPollingOffCallbackFlag = true;
  3754. log.warn(longPollingIntervalTime + "毫秒之后,SDK会发起新的longPolling请求...");
  3755. setTimeout(startNextLongPolling, longPollingIntervalTime);//长轮询接口报错次数达到一定值,每间隔5s发起新的长轮询
  3756. }
  3757. }
  3758. };
  3759. //发起新的长轮询请求
  3760. var startNextLongPolling = function () {
  3761. longPollingOn && MsgManager.longPolling();
  3762. };
  3763. //处理未决的加群申请消息列表
  3764. var handlerApplyJoinGroupSystemMsgs = function (eventArray) {
  3765. for (var i in eventArray) {
  3766. var e = eventArray[i];
  3767. switch (e.Event) {
  3768. case LONG_POLLINNG_EVENT_TYPE.GROUP_SYSTEM://(多终端同步)群系统消息
  3769. log.warn("handlerApplyJoinGroupSystemMsgs: handler new group system msg");
  3770. //true 表示 解决加群申请通知存在重复的问题(已处理的通知,下次登录还会拉到),需要判重
  3771. handlerGroupSystemMsgs(e.GroupTips, true);
  3772. break;
  3773. default:
  3774. log.error("syncMsgs收到未知的群系统消息类型: Event=" + e.Event);
  3775. break;
  3776. }
  3777. }
  3778. };
  3779. //拉取c2c消息(包含加群未决消息,需要处理)
  3780. this.syncMsgs = function (cbOk, cbErr) {
  3781. var notifyInfo = [];
  3782. var msgInfos = [];
  3783. //读取C2C消息
  3784. proto_getMsgs(MsgStore.cookie, MsgStore.syncFlag, function (resp) {
  3785. //拉取完毕
  3786. if (resp.SyncFlag == 2) {
  3787. MsgStore.syncFlag = 0;
  3788. }
  3789. //处理c2c消息
  3790. msgInfos = resp.MsgList;//返回的消息列表
  3791. MsgStore.cookie = resp.Cookie;//cookies,记录当前读到的最新消息位置
  3792. for (var i in msgInfos) {
  3793. var msgInfo = msgInfos[i];
  3794. var isSendMsg, id, headUrl;
  3795. if (msgInfo.From_Account == ctx.identifier) {//当前用户发送的消息
  3796. isSendMsg = true;
  3797. id = msgInfo.To_Account;//读取接收者信息
  3798. headUrl = '';
  3799. } else {//当前用户收到的消息
  3800. isSendMsg = false;
  3801. id = msgInfo.From_Account;//读取发送者信息
  3802. headUrl = '';
  3803. }
  3804. var sess = MsgStore.sessByTypeId(SESSION_TYPE.C2C, id);
  3805. if (!sess) {
  3806. sess = new Session(SESSION_TYPE.C2C, id, id, headUrl, 0, 0);
  3807. }
  3808. var msg = new Msg(sess, isSendMsg, msgInfo.MsgSeq, msgInfo.MsgRandom, msgInfo.MsgTimeStamp, msgInfo.From_Account);
  3809. var msgBody = null;
  3810. var msgContent = null;
  3811. var msgType = null;
  3812. for (var mi in msgInfo.MsgBody) {
  3813. msgBody = msgInfo.MsgBody[mi];
  3814. msgType = msgBody.MsgType;
  3815. switch (msgType) {
  3816. case MSG_ELEMENT_TYPE.TEXT:
  3817. msgContent = new Msg.Elem.Text(msgBody.MsgContent.Text);
  3818. break;
  3819. case MSG_ELEMENT_TYPE.FACE:
  3820. msgContent = new Msg.Elem.Face(
  3821. msgBody.MsgContent.Index,
  3822. msgBody.MsgContent.Data
  3823. );
  3824. break;
  3825. case MSG_ELEMENT_TYPE.IMAGE:
  3826. msgContent = new Msg.Elem.Images(
  3827. msgBody.MsgContent.UUID
  3828. );
  3829. for (var j in msgBody.MsgContent.ImageInfoArray) {
  3830. var tempImg = msgBody.MsgContent.ImageInfoArray[j];
  3831. msgContent.addImage(
  3832. new Msg.Elem.Images.Image(
  3833. tempImg.Type,
  3834. tempImg.Size,
  3835. tempImg.Width,
  3836. tempImg.Height,
  3837. tempImg.URL
  3838. )
  3839. );
  3840. }
  3841. break;
  3842. case MSG_ELEMENT_TYPE.SOUND:
  3843. var soundUrl = getSoundDownUrl(msgBody.MsgContent.UUID, msgInfo.From_Account);
  3844. if (soundUrl) {
  3845. msgContent = new Msg.Elem.Sound(
  3846. msgBody.MsgContent.UUID,
  3847. msgBody.MsgContent.Second,
  3848. msgBody.MsgContent.Size,
  3849. msgInfo.From_Account,
  3850. soundUrl
  3851. );
  3852. } else {
  3853. msgType = MSG_ELEMENT_TYPE.TEXT;
  3854. msgContent = new Msg.Elem.Text('[语音消息]下载地址解析出错');
  3855. }
  3856. break;
  3857. case MSG_ELEMENT_TYPE.LOCATION:
  3858. msgType = MSG_ELEMENT_TYPE.TEXT;
  3859. msgContent = new Msg.Elem.Text('web端暂不支持地理位置消息');
  3860. break;
  3861. case MSG_ELEMENT_TYPE.FILE:
  3862. case MSG_ELEMENT_TYPE.FILE + " ":
  3863. msgType = MSG_ELEMENT_TYPE.FILE;
  3864. var fileUrl = getFileDownUrl(msgBody.MsgContent.UUID, msgInfo.From_Account, msgBody.MsgContent.FileName);
  3865. if (fileUrl) {
  3866. msgContent = new Msg.Elem.File(
  3867. msgBody.MsgContent.UUID,
  3868. msgBody.MsgContent.FileName,
  3869. msgBody.MsgContent.FileSize,
  3870. msgInfo.From_Account,
  3871. fileUrl
  3872. );
  3873. } else {
  3874. msgType = MSG_ELEMENT_TYPE.TEXT;
  3875. msgContent = new Msg.Elem.Text('[文件消息下载地址解析出错]');
  3876. }
  3877. break;
  3878. case MSG_ELEMENT_TYPE.CUSTOM:
  3879. try {
  3880. var data = JSON.parse(msgBody.MsgContent.Data);
  3881. if (data && data.userAction && data.userAction == FRIEND_WRITE_MSG_ACTION.ING) {//过滤安卓或ios的正在输入自定义消息
  3882. continue;
  3883. }
  3884. } catch (e) { }
  3885. msgType = MSG_ELEMENT_TYPE.CUSTOM;
  3886. msgContent = new Msg.Elem.Custom(
  3887. msgBody.MsgContent.Data,
  3888. msgBody.MsgContent.Desc,
  3889. msgBody.MsgContent.Ext
  3890. );
  3891. break;
  3892. default:
  3893. msgType = MSG_ELEMENT_TYPE.TEXT;
  3894. msgContent = new Msg.Elem.Text('web端暂不支持' + msgBody.MsgType + '消息');
  3895. break;
  3896. }
  3897. msg.elems.push(new Msg.Elem(msgType, msgContent));
  3898. }
  3899. if (msg.elems.length > 0 && MsgStore.addMsg(msg)) {
  3900. notifyInfo.push(msg);
  3901. }
  3902. } // for loop
  3903. //处理加群未决申请消息
  3904. handlerApplyJoinGroupSystemMsgs(resp.EventArray);
  3905. if (notifyInfo.length > 0)
  3906. MsgStore.updateTimeline();
  3907. if (cbOk) cbOk(notifyInfo);
  3908. else if (notifyInfo.length > 0) {
  3909. if (onMsgCallback) onMsgCallback(notifyInfo);
  3910. }
  3911. }, function (err) {
  3912. log.error("getMsgs failed:" + err.ErrorInfo);
  3913. if (cbErr) cbErr(err);
  3914. });
  3915. };
  3916. //拉取C2C漫游消息
  3917. this.getC2CHistoryMsgs = function (options, cbOk, cbErr) {
  3918. if (!options.Peer_Account) {
  3919. if (cbErr) {
  3920. cbErr(tool.getReturnError("Peer_Account is empty", -13));
  3921. return;
  3922. }
  3923. }
  3924. if (!options.MaxCnt) {
  3925. options.MaxCnt = 15;
  3926. }
  3927. if (options.MaxCnt <= 0) {
  3928. if (cbErr) {
  3929. cbErr(tool.getReturnError("MaxCnt should be greater than 0", -14));
  3930. return;
  3931. }
  3932. }
  3933. if (options.MaxCnt > 15) {
  3934. if (cbErr) {
  3935. cbErr(tool.getReturnError("MaxCnt can not be greater than 15", -15));
  3936. return;
  3937. }
  3938. return;
  3939. }
  3940. if (options.MsgKey == null || options.MsgKey == undefined) {
  3941. options.MsgKey = '';
  3942. }
  3943. var opts = {
  3944. 'Peer_Account': options.Peer_Account,
  3945. 'MaxCnt': options.MaxCnt,
  3946. 'LastMsgTime': options.LastMsgTime,
  3947. 'MsgKey': options.MsgKey
  3948. };
  3949. //读取c2c漫游消息
  3950. proto_getC2CHistoryMsgs(opts, function (resp) {
  3951. var msgObjList = [];
  3952. //处理c2c消息
  3953. msgInfos = resp.MsgList;//返回的消息列表
  3954. //C2CHitoryMsgKeyMap[options.Peer_Account]=resp.MsgKey;
  3955. for (var i in msgInfos) {
  3956. var msgInfo = msgInfos[i];
  3957. var isSendMsg, id, headUrl;
  3958. if (msgInfo.From_Account == ctx.identifier) {//当前用户发送的消息
  3959. isSendMsg = true;
  3960. id = msgInfo.To_Account;//读取接收者信息
  3961. headUrl = '';
  3962. } else {//当前用户收到的消息
  3963. isSendMsg = false;
  3964. id = msgInfo.From_Account;//读取发送者信息
  3965. headUrl = '';
  3966. }
  3967. var sess = MsgStore.sessByTypeId(SESSION_TYPE.C2C, id);
  3968. if (!sess) {
  3969. sess = new Session(SESSION_TYPE.C2C, id, id, headUrl, 0, 0);
  3970. }
  3971. var msg = new Msg(sess, isSendMsg, msgInfo.MsgSeq, msgInfo.MsgRandom, msgInfo.MsgTimeStamp, msgInfo.From_Account);
  3972. var msgBody = null;
  3973. var msgContent = null;
  3974. var msgType = null;
  3975. for (var mi in msgInfo.MsgBody) {
  3976. msgBody = msgInfo.MsgBody[mi];
  3977. msgType = msgBody.MsgType;
  3978. switch (msgType) {
  3979. case MSG_ELEMENT_TYPE.TEXT:
  3980. msgContent = new Msg.Elem.Text(msgBody.MsgContent.Text);
  3981. break;
  3982. case MSG_ELEMENT_TYPE.FACE:
  3983. msgContent = new Msg.Elem.Face(
  3984. msgBody.MsgContent.Index,
  3985. msgBody.MsgContent.Data
  3986. );
  3987. break;
  3988. case MSG_ELEMENT_TYPE.IMAGE:
  3989. msgContent = new Msg.Elem.Images(
  3990. msgBody.MsgContent.UUID
  3991. );
  3992. for (var j in msgBody.MsgContent.ImageInfoArray) {
  3993. var tempImg = msgBody.MsgContent.ImageInfoArray[j];
  3994. msgContent.addImage(
  3995. new Msg.Elem.Images.Image(
  3996. tempImg.Type,
  3997. tempImg.Size,
  3998. tempImg.Width,
  3999. tempImg.Height,
  4000. tempImg.URL
  4001. )
  4002. );
  4003. }
  4004. break;
  4005. case MSG_ELEMENT_TYPE.SOUND:
  4006. var soundUrl = getSoundDownUrl(msgBody.MsgContent.UUID, msgInfo.From_Account);
  4007. if (soundUrl) {
  4008. msgContent = new Msg.Elem.Sound(
  4009. msgBody.MsgContent.UUID,
  4010. msgBody.MsgContent.Second,
  4011. msgBody.MsgContent.Size,
  4012. msgInfo.From_Account,
  4013. soundUrl
  4014. );
  4015. } else {
  4016. msgType = MSG_ELEMENT_TYPE.TEXT;
  4017. msgContent = new Msg.Elem.Text('[语音消息]下载地址解析出错');
  4018. }
  4019. break;
  4020. case MSG_ELEMENT_TYPE.LOCATION:
  4021. msgType = MSG_ELEMENT_TYPE.TEXT;
  4022. msgContent = new Msg.Elem.Text('web端暂不支持地理位置消息');
  4023. break;
  4024. case MSG_ELEMENT_TYPE.FILE:
  4025. case MSG_ELEMENT_TYPE.FILE + " ":
  4026. msgType = MSG_ELEMENT_TYPE.FILE;
  4027. var fileUrl = getFileDownUrl(msgBody.MsgContent.UUID, msgInfo.From_Account, msgBody.MsgContent.FileName);
  4028. if (fileUrl) {
  4029. msgContent = new Msg.Elem.File(
  4030. msgBody.MsgContent.UUID,
  4031. msgBody.MsgContent.FileName,
  4032. msgBody.MsgContent.FileSize,
  4033. msgInfo.From_Account,
  4034. fileUrl
  4035. );
  4036. } else {
  4037. msgType = MSG_ELEMENT_TYPE.TEXT;
  4038. msgContent = new Msg.Elem.Text('[文件消息下载地址解析出错]');
  4039. }
  4040. break;
  4041. case MSG_ELEMENT_TYPE.CUSTOM:
  4042. msgType = MSG_ELEMENT_TYPE.CUSTOM;
  4043. msgContent = new Msg.Elem.Custom(
  4044. msgBody.MsgContent.Data,
  4045. msgBody.MsgContent.Desc,
  4046. msgBody.MsgContent.Ext
  4047. );
  4048. break;
  4049. default:
  4050. msgType = MSG_ELEMENT_TYPE.TEXT;
  4051. msgContent = new Msg.Elem.Text('web端暂不支持' + msgBody.MsgType + '消息');
  4052. break;
  4053. }
  4054. msg.elems.push(new Msg.Elem(msgType, msgContent));
  4055. }
  4056. MsgStore.addMsg(msg);
  4057. msgObjList.push(msg);
  4058. } // for loop
  4059. MsgStore.updateTimeline();
  4060. if (cbOk) {
  4061. var newResp = {
  4062. 'Complete': resp.Complete,
  4063. 'MsgCount': msgObjList.length,
  4064. 'LastMsgTime': resp.LastMsgTime,
  4065. 'MsgKey': resp.MsgKey,
  4066. 'MsgList': msgObjList
  4067. };
  4068. cbOk(newResp);
  4069. }
  4070. }, function (err) {
  4071. log.error("getC2CHistoryMsgs failed:" + err.ErrorInfo);
  4072. if (cbErr) cbErr(err);
  4073. });
  4074. };
  4075. //拉群历史消息
  4076. //不传cbOk 和 cbErr,则会调用新消息回调函数
  4077. this.syncGroupMsgs = function (options, cbOk, cbErr) {
  4078. if (options.ReqMsgSeq <= 0) {
  4079. if (cbErr) {
  4080. var errInfo = "ReqMsgSeq must be greater than 0";
  4081. var error = tool.getReturnError(errInfo, -16);
  4082. cbErr(error);
  4083. }
  4084. return;
  4085. }
  4086. var opts = {
  4087. 'GroupId': options.GroupId,
  4088. 'ReqMsgSeq': options.ReqMsgSeq,
  4089. 'ReqMsgNumber': options.ReqMsgNumber
  4090. };
  4091. //读群漫游消息
  4092. proto_getGroupMsgs(opts, function (resp) {
  4093. var notifyInfo = [];
  4094. var group_id = resp.GroupId;//返回的群id
  4095. var msgInfos = resp.RspMsgList;//返回的消息列表
  4096. if (msgInfos == null || msgInfos == undefined) {
  4097. if (cbOk) {
  4098. cbOk([]);
  4099. }
  4100. return;
  4101. }
  4102. for (var i = msgInfos.length - 1; i >= 0; i--) {
  4103. var msgInfo = msgInfos[i];
  4104. //如果是已经删除的消息或者发送者帐号为空或者消息内容为空
  4105. //IsPlaceMsg=1
  4106. if (msgInfo.IsPlaceMsg || !msgInfo.From_Account || !msgInfo.MsgBody || msgInfo.MsgBody.length == 0) {
  4107. continue;
  4108. }
  4109. var msg = handlerGroupMsg(msgInfo, true, true);
  4110. if (msg) {
  4111. notifyInfo.push(msg);
  4112. }
  4113. } // for loop
  4114. if (notifyInfo.length > 0)
  4115. MsgStore.updateTimeline();
  4116. if (cbOk) cbOk(notifyInfo);
  4117. else if (notifyInfo.length > 0) {
  4118. if (onMsgCallback) onMsgCallback(notifyInfo);
  4119. }
  4120. }, function (err) {
  4121. log.error("getGroupMsgs failed:" + err.ErrorInfo);
  4122. if (cbErr) cbErr(err);
  4123. });
  4124. };
  4125. //处理群消息(普通消息+提示消息)
  4126. //isSyncGroupMsgs 是否主动拉取群消息标志
  4127. //isAddMsgFlag 是否需要保存到MsgStore,如果需要,这里会存在判重逻辑
  4128. var handlerGroupMsg = function (msgInfo, isSyncGroupMsgs, isAddMsgFlag) {
  4129. if (msgInfo.IsPlaceMsg || !msgInfo.From_Account || !msgInfo.MsgBody || msgInfo.MsgBody.length == 0) {
  4130. return null;
  4131. }
  4132. var isSendMsg, id, headUrl, fromAccountNick;
  4133. var group_id = msgInfo.ToGroupId;
  4134. var group_name = group_id;
  4135. if (msgInfo.GroupInfo) {//取出群名称
  4136. if (msgInfo.GroupInfo.GroupName) {
  4137. group_name = msgInfo.GroupInfo.GroupName;
  4138. }
  4139. }
  4140. //取出成员昵称
  4141. fromAccountNick = msgInfo.From_Account;
  4142. if (msgInfo.GroupInfo) {
  4143. if (msgInfo.GroupInfo.From_AccountNick) {
  4144. fromAccountNick = msgInfo.GroupInfo.From_AccountNick;
  4145. }
  4146. }
  4147. if (msgInfo.From_Account == ctx.identifier) {//当前用户发送的消息
  4148. isSendMsg = true;
  4149. id = msgInfo.From_Account;//读取接收者信息
  4150. headUrl = '';
  4151. } else {//当前用户收到的消息
  4152. isSendMsg = false;
  4153. id = msgInfo.From_Account;//读取发送者信息
  4154. headUrl = '';
  4155. }
  4156. var sess = MsgStore.sessByTypeId(SESSION_TYPE.GROUP, group_id);
  4157. if (!sess) {
  4158. sess = new Session(SESSION_TYPE.GROUP, group_id, group_name, headUrl, 0, 0);
  4159. }
  4160. var subType = GROUP_MSG_SUB_TYPE.COMMON;//消息类型
  4161. //群提示消息,重新封装下
  4162. if (LONG_POLLINNG_EVENT_TYPE.GROUP_TIP == msgInfo.Event || LONG_POLLINNG_EVENT_TYPE.GROUP_TIP2 == msgInfo.Event) {
  4163. subType = GROUP_MSG_SUB_TYPE.TIP;
  4164. var groupTip = msgInfo.MsgBody;
  4165. msgInfo.MsgBody = [];
  4166. msgInfo.MsgBody.push({
  4167. "MsgType": MSG_ELEMENT_TYPE.GROUP_TIP,
  4168. "MsgContent": groupTip
  4169. }
  4170. );
  4171. } else if (msgInfo.MsgPriority) {//群点赞消息
  4172. if (msgInfo.MsgPriority == GROUP_MSG_PRIORITY_TYPE.REDPACKET) {
  4173. subType = GROUP_MSG_SUB_TYPE.REDPACKET;
  4174. } else if (msgInfo.MsgPriority == GROUP_MSG_PRIORITY_TYPE.LOVEMSG) {
  4175. subType = GROUP_MSG_SUB_TYPE.LOVEMSG;
  4176. }
  4177. }
  4178. var msg = new Msg(sess, isSendMsg, msgInfo.MsgSeq, msgInfo.MsgSeq, msgInfo.MsgTimeStamp, msgInfo.From_Account, subType, fromAccountNick);
  4179. var msgBody = null;
  4180. var msgContent = null;
  4181. var msgType = null;
  4182. for (var mi in msgInfo.MsgBody) {
  4183. msgBody = msgInfo.MsgBody[mi];
  4184. msgType = msgBody.MsgType;
  4185. switch (msgType) {
  4186. case MSG_ELEMENT_TYPE.TEXT:
  4187. msgContent = new Msg.Elem.Text(msgBody.MsgContent.Text);
  4188. break;
  4189. case MSG_ELEMENT_TYPE.FACE:
  4190. msgContent = new Msg.Elem.Face(
  4191. msgBody.MsgContent.Index,
  4192. msgBody.MsgContent.Data
  4193. );
  4194. break;
  4195. case MSG_ELEMENT_TYPE.IMAGE:
  4196. msgContent = new Msg.Elem.Images(
  4197. msgBody.MsgContent.UUID
  4198. );
  4199. for (var j in msgBody.MsgContent.ImageInfoArray) {
  4200. msgContent.addImage(
  4201. new Msg.Elem.Images.Image(
  4202. msgBody.MsgContent.ImageInfoArray[j].Type,
  4203. msgBody.MsgContent.ImageInfoArray[j].Size,
  4204. msgBody.MsgContent.ImageInfoArray[j].Width,
  4205. msgBody.MsgContent.ImageInfoArray[j].Height,
  4206. msgBody.MsgContent.ImageInfoArray[j].URL
  4207. )
  4208. );
  4209. }
  4210. break;
  4211. case MSG_ELEMENT_TYPE.SOUND:
  4212. var soundUrl = getSoundDownUrl(msgBody.MsgContent.UUID, msgInfo.From_Account);
  4213. if (soundUrl) {
  4214. msgContent = new Msg.Elem.Sound(
  4215. msgBody.MsgContent.UUID,
  4216. msgBody.MsgContent.Second,
  4217. msgBody.MsgContent.Size,
  4218. msgInfo.From_Account,
  4219. soundUrl
  4220. );
  4221. } else {
  4222. msgType = MSG_ELEMENT_TYPE.TEXT;
  4223. msgContent = new Msg.Elem.Text('[语音消息]下载地址解析出错');
  4224. }
  4225. break;
  4226. case MSG_ELEMENT_TYPE.LOCATION:
  4227. msgType = MSG_ELEMENT_TYPE.TEXT;
  4228. msgContent = new Msg.Elem.Text('web端暂不支持地理位置消息');
  4229. break;
  4230. case MSG_ELEMENT_TYPE.FILE:
  4231. case MSG_ELEMENT_TYPE.FILE + " ":
  4232. msgType = MSG_ELEMENT_TYPE.FILE;
  4233. var fileUrl = getFileDownUrl(msgBody.MsgContent.UUID, msgInfo.From_Account, msgBody.MsgContent.FileName);
  4234. if (fileUrl) {
  4235. msgContent = new Msg.Elem.File(
  4236. msgBody.MsgContent.UUID,
  4237. msgBody.MsgContent.FileName,
  4238. msgBody.MsgContent.FileSize,
  4239. msgInfo.From_Account,
  4240. fileUrl
  4241. );
  4242. } else {
  4243. msgType = MSG_ELEMENT_TYPE.TEXT;
  4244. msgContent = new Msg.Elem.Text('[文件消息]地址解析出错');
  4245. }
  4246. break;
  4247. case MSG_ELEMENT_TYPE.GROUP_TIP:
  4248. var opType = msgBody.MsgContent.OpType;
  4249. msgContent = new Msg.Elem.GroupTip(
  4250. opType,
  4251. msgBody.MsgContent.Operator_Account,
  4252. group_id,
  4253. msgInfo.GroupInfo.GroupName,
  4254. msgBody.MsgContent.List_Account,
  4255. msgBody.MsgContent.MsgOperatorMemberExtraInfo
  4256. );
  4257. //加群或退群时,设置最新群成员数
  4258. if (GROUP_TIP_TYPE.JOIN == opType) {
  4259. msgContent.setGroupMemberNum(msgBody.MsgContent.MemberNum);
  4260. var memberInfos = msgBody.MsgContent.MsgMemberExtraInfo;
  4261. for (var n in memberInfos) {
  4262. var memberInfo = memberInfos[n];
  4263. msgContent.addUserInfo(
  4264. new Msg.Elem.GroupTip.UserInfo(
  4265. memberInfo.User_Account, memberInfo.NickName
  4266. )
  4267. );
  4268. }
  4269. } else if (GROUP_TIP_TYPE.QUIT == opType) {
  4270. msgContent.setGroupMemberNum(msgBody.MsgContent.MemberNum);
  4271. } else if (GROUP_TIP_TYPE.MODIFY_GROUP_INFO == opType) {//群资料变更
  4272. var tempIsCallbackFlag = false;
  4273. var tempNewGroupInfo = {
  4274. "GroupId": group_id,
  4275. "GroupFaceUrl": null,
  4276. "GroupName": null,
  4277. "OwnerAccount": null,
  4278. "GroupNotification": null,
  4279. "GroupIntroduction": null
  4280. };
  4281. var msgGroupNewInfo = msgBody.MsgContent.MsgGroupNewInfo;
  4282. if (msgGroupNewInfo.GroupFaceUrl) {
  4283. var tmpNGIFaceUrl = new Msg.Elem.GroupTip.GroupInfo(
  4284. GROUP_TIP_MODIFY_GROUP_INFO_TYPE.FACE_URL,
  4285. msgGroupNewInfo.GroupFaceUrl
  4286. );
  4287. msgContent.addGroupInfo(tmpNGIFaceUrl);
  4288. tempIsCallbackFlag = true;
  4289. tempNewGroupInfo.GroupFaceUrl = msgGroupNewInfo.GroupFaceUrl;
  4290. }
  4291. if (msgGroupNewInfo.GroupName) {
  4292. var tmpNGIName = new Msg.Elem.GroupTip.GroupInfo(
  4293. GROUP_TIP_MODIFY_GROUP_INFO_TYPE.NAME,
  4294. msgGroupNewInfo.GroupName
  4295. );
  4296. msgContent.addGroupInfo(tmpNGIName);
  4297. tempIsCallbackFlag = true;
  4298. tempNewGroupInfo.GroupName = msgGroupNewInfo.GroupName;
  4299. }
  4300. if (msgGroupNewInfo.Owner_Account) {
  4301. var tmpNGIOwner = new Msg.Elem.GroupTip.GroupInfo(
  4302. GROUP_TIP_MODIFY_GROUP_INFO_TYPE.OWNER,
  4303. msgGroupNewInfo.Owner_Account
  4304. );
  4305. msgContent.addGroupInfo(tmpNGIOwner);
  4306. tempIsCallbackFlag = true;
  4307. tempNewGroupInfo.OwnerAccount = msgGroupNewInfo.Owner_Account;
  4308. }
  4309. if (msgGroupNewInfo.GroupNotification) {
  4310. var tmpNGINotification = new Msg.Elem.GroupTip.GroupInfo(
  4311. GROUP_TIP_MODIFY_GROUP_INFO_TYPE.NOTIFICATION,
  4312. msgGroupNewInfo.GroupNotification
  4313. );
  4314. msgContent.addGroupInfo(tmpNGINotification);
  4315. tempIsCallbackFlag = true;
  4316. tempNewGroupInfo.GroupNotification = msgGroupNewInfo.GroupNotification;
  4317. }
  4318. if (msgGroupNewInfo.GroupIntroduction) {
  4319. var tmpNGIIntroduction = new Msg.Elem.GroupTip.GroupInfo(
  4320. GROUP_TIP_MODIFY_GROUP_INFO_TYPE.INTRODUCTION,
  4321. msgGroupNewInfo.GroupIntroduction
  4322. );
  4323. msgContent.addGroupInfo(tmpNGIIntroduction);
  4324. tempIsCallbackFlag = true;
  4325. tempNewGroupInfo.GroupIntroduction = msgGroupNewInfo.GroupIntroduction;
  4326. }
  4327. //回调群资料变化通知方法
  4328. if (isSyncGroupMsgs == false && tempIsCallbackFlag && onGroupInfoChangeCallback) {
  4329. onGroupInfoChangeCallback(tempNewGroupInfo);
  4330. }
  4331. } else if (GROUP_TIP_TYPE.MODIFY_MEMBER_INFO == opType) {//群成员变更
  4332. var memberInfos = msgBody.MsgContent.MsgMemberInfo;
  4333. for (var n in memberInfos) {
  4334. var memberInfo = memberInfos[n];
  4335. msgContent.addMemberInfo(
  4336. new Msg.Elem.GroupTip.MemberInfo(
  4337. memberInfo.User_Account, memberInfo.ShutupTime
  4338. )
  4339. );
  4340. }
  4341. }
  4342. break;
  4343. case MSG_ELEMENT_TYPE.CUSTOM:
  4344. msgType = MSG_ELEMENT_TYPE.CUSTOM;
  4345. msgContent = new Msg.Elem.Custom(
  4346. msgBody.MsgContent.Data,
  4347. msgBody.MsgContent.Desc,
  4348. msgBody.MsgContent.Ext
  4349. );
  4350. break;
  4351. default:
  4352. msgType = MSG_ELEMENT_TYPE.TEXT;
  4353. msgContent = new Msg.Elem.Text('web端暂不支持' + msgBody.MsgType + '消息');
  4354. break;
  4355. }
  4356. msg.elems.push(new Msg.Elem(msgType, msgContent));
  4357. }
  4358. if (isAddMsgFlag == false) {//不需要保存消息
  4359. return msg;
  4360. }
  4361. if (MsgStore.addMsg(msg)) {
  4362. //更新我的群最大的消息seq
  4363. var tempCurMaxSeq = myGroupMaxSeqs[group_id];
  4364. if (tempCurMaxSeq) {
  4365. if (msgInfo.MsgSeq > tempCurMaxSeq) {
  4366. myGroupMaxSeqs[group_id] = msgInfo.MsgSeq;
  4367. }
  4368. } else {
  4369. myGroupMaxSeqs[group_id] = msgInfo.MsgSeq;
  4370. }
  4371. return msg;
  4372. } else {
  4373. return null;
  4374. }
  4375. };
  4376. //初始化
  4377. this.init = function (listeners, cbOk, cbErr) {
  4378. if (!listeners.onMsgNotify) {
  4379. log.warn('listeners.onMsgNotify is empty');
  4380. }
  4381. onMsgCallback = listeners.onMsgNotify;
  4382. if (listeners.onBigGroupMsgNotify) {
  4383. onBigGroupMsgCallback = listeners.onBigGroupMsgNotify;
  4384. } else {
  4385. log.warn('listeners.onBigGroupMsgNotify is empty');
  4386. }
  4387. if (listeners.onGroupSystemNotifys) {
  4388. onGroupSystemNotifyCallbacks = listeners.onGroupSystemNotifys;
  4389. } else {
  4390. log.warn('listeners.onGroupSystemNotifys is empty');
  4391. }
  4392. if (listeners.onGroupInfoChangeNotify) {
  4393. onGroupInfoChangeCallback = listeners.onGroupInfoChangeNotify;
  4394. } else {
  4395. log.warn('listeners.onGroupInfoChangeNotify is empty');
  4396. }
  4397. if (listeners.onFriendSystemNotifys) {
  4398. onFriendSystemNotifyCallbacks = listeners.onFriendSystemNotifys;
  4399. } else {
  4400. log.warn('listeners.onFriendSystemNotifys is empty');
  4401. }
  4402. if (listeners.onProfileSystemNotifys) {
  4403. onProfileSystemNotifyCallbacks = listeners.onProfileSystemNotifys;
  4404. } else {
  4405. log.warn('listeners.onProfileSystemNotifys is empty');
  4406. }
  4407. if (!ctx.identifier || !ctx.userSig) {
  4408. if (cbOk) {
  4409. var success = {
  4410. 'ActionStatus': ACTION_STATUS.OK,
  4411. 'ErrorCode': 0,
  4412. 'ErrorInfo': "login success(no login state)"
  4413. };
  4414. cbOk(success);
  4415. }
  4416. return;
  4417. }
  4418. //初始化
  4419. initMyGroupMaxSeqs(
  4420. function (resp) {
  4421. log.info('initMyGroupMaxSeqs success');
  4422. //初始化文件
  4423. initIpAndAuthkey(
  4424. function (initIpAndAuthkeyResp) {
  4425. log.info('initIpAndAuthkey success');
  4426. if (cbOk) {
  4427. log.info('login success(have login state))');
  4428. var success = {
  4429. 'ActionStatus': ACTION_STATUS.OK,
  4430. 'ErrorCode': 0,
  4431. 'ErrorInfo': "login success"
  4432. };
  4433. cbOk(success);
  4434. }
  4435. MsgManager.setLongPollingOn(true);//开启长轮询
  4436. longPollingOn && MsgManager.longPolling(cbOk);
  4437. }, cbErr);
  4438. }, cbErr);
  4439. };
  4440. //发消息(私聊或群聊)
  4441. this.sendMsg = function (msg, cbOk, cbErr) {
  4442. proto_sendMsg(msg, function (resp) {
  4443. //私聊时,加入自己的发的消息,群聊时,由于seq和服务器的seq不一样,所以不作处理
  4444. if (msg.sess.type() == SESSION_TYPE.C2C) {
  4445. if (!MsgStore.addMsg(msg)) {
  4446. var errInfo = "sendMsg: addMsg failed!";
  4447. var error = tool.getReturnError(errInfo, -17);
  4448. log.error(errInfo);
  4449. if (cbErr) cbErr(error);
  4450. return;
  4451. }
  4452. //更新信息流时间
  4453. MsgStore.updateTimeline();
  4454. }
  4455. if (cbOk) cbOk(resp);
  4456. }, function (err) {
  4457. if (cbErr) cbErr(err);
  4458. });
  4459. };
  4460. //获取语音下载url
  4461. var getSoundDownUrl = function (uuid, senderId) {
  4462. var soundUrl = null;
  4463. if (authkey && ipList[0]) {
  4464. soundUrl = "http://" + ipList[0] + "/asn.com/stddownload_common_file?authkey=" + authkey + "&bid=" + DOWNLOAD_FILE.BUSSINESS_ID + "&subbid=" + ctx.sdkAppID + "&fileid=" + uuid + "&filetype=" + DOWNLOAD_FILE_TYPE.SOUND + "&openid=" + senderId + "&ver=0";
  4465. } else {
  4466. log.error("拼接语音下载url不报错:ip或者authkey为空");
  4467. }
  4468. return soundUrl;
  4469. };
  4470. //获取文件下载地址
  4471. var getFileDownUrl = function (uuid, senderId, fileName) {
  4472. var fileUrl = null;
  4473. if (authkey && ipList[0]) {
  4474. fileUrl = "http://" + ipList[0] + "/asn.com/stddownload_common_file?authkey=" + authkey + "&bid=" + DOWNLOAD_FILE.BUSSINESS_ID + "&subbid=" + ctx.sdkAppID + "&fileid=" + uuid + "&filetype=" + DOWNLOAD_FILE_TYPE.FILE + "&openid=" + senderId + "&ver=0&filename=" + encodeURIComponent(fileName);
  4475. } else {
  4476. log.error("拼接文件下载url不报错:ip或者authkey为空");
  4477. }
  4478. return fileUrl;
  4479. };
  4480. };
  4481. //上传文件
  4482. var FileUploder = new function () {
  4483. this.fileMd5 = null;
  4484. //获取文件MD5
  4485. var getFileMD5 = function (file, cbOk, cbErr) {
  4486. //FileReader pc浏览器兼容性
  4487. //Feature Firefox (Gecko) Chrome Internet Explorer Opera Safari
  4488. //Basic support 3.6 7 10 12.02 6.0.2
  4489. var fileReader = null;
  4490. try {
  4491. fileReader = new FileReader();//分块读取文件对象
  4492. } catch (e) {
  4493. if (cbErr) {
  4494. cbErr(tool.getReturnError('当前浏览器不支持FileReader', -18));
  4495. return;
  4496. }
  4497. }
  4498. //file的slice方法,注意它的兼容性,在不同浏览器的写法不同
  4499. var blobSlice = File.prototype.mozSlice || File.prototype.webkitSlice || File.prototype.slice;
  4500. if (!blobSlice) {
  4501. if (cbErr) {
  4502. cbErr(tool.getReturnError('当前浏览器不支持FileAPI', -19));
  4503. return;
  4504. }
  4505. }
  4506. var chunkSize = 2 * 1024 * 1024;//分块大小,2M
  4507. var chunks = Math.ceil(file.size / chunkSize);//总块数
  4508. var currentChunk = 0;//当前块数
  4509. var spark = new SparkMD5();//获取MD5对象
  4510. fileReader.onload = function (e) {//数据加载完毕事件
  4511. var binaryStr = "";
  4512. var bytes = new Uint8Array(e.target.result);
  4513. var length = bytes.byteLength;
  4514. for (var i = 0; i < length; i++) {
  4515. binaryStr += String.fromCharCode(bytes[i]);//二进制转换字符串
  4516. }
  4517. spark.appendBinary(binaryStr);
  4518. currentChunk++;
  4519. if (currentChunk < chunks) {
  4520. loadNext();//读取下一块数据
  4521. } else {
  4522. this.fileMd5 = spark.end();//得到文件MD5值
  4523. if (cbOk) {
  4524. cbOk(this.fileMd5);
  4525. }
  4526. }
  4527. };
  4528. //分片读取文件
  4529. function loadNext() {
  4530. var start = currentChunk * chunkSize, end = start + chunkSize >= file.size ? file.size : start + chunkSize;
  4531. //根据开始和结束位置,切割文件
  4532. var b = blobSlice.call(file, start, end);
  4533. //readAsBinaryString ie浏览器不兼容此方法
  4534. //fileReader.readAsBinaryString(blobSlice.call(file, start, end));
  4535. fileReader.readAsArrayBuffer(b);//ie,chrome,firefox等主流浏览器兼容此方法
  4536. }
  4537. loadNext();//开始读取
  4538. };
  4539. //提交上传图片表单(用于低版本IE9以下)
  4540. this.submitUploadFileForm = function (options, cbOk, cbErr) {
  4541. var errInfo;
  4542. var error;
  4543. var formId = options.formId;
  4544. var fileId = options.fileId;
  4545. var iframeNum = uploadResultIframeId++;
  4546. var iframeName = "uploadResultIframe_" + iframeNum;
  4547. var toAccount = options.To_Account;
  4548. var businessType = options.businessType;
  4549. var form = document.getElementById(formId);
  4550. if (!form) {
  4551. errInfo = "获取表单对象为空: formId=" + formId + "(formId非法)";
  4552. error = tool.getReturnError(errInfo, -20);
  4553. if (cbErr) cbErr(error);
  4554. return;
  4555. }
  4556. var fileObj = document.getElementById(fileId);
  4557. if (!fileObj) {
  4558. errInfo = "获取文件对象为空: fileId=" + fileId + "(没有选择文件或者fileId非法)";
  4559. error = tool.getReturnError(errInfo, -21);
  4560. if (cbErr) cbErr(error);
  4561. return;
  4562. }
  4563. //fileObj.type="file";//ie8下不起作用,必须由业务自己设置
  4564. fileObj.name = "file";
  4565. var iframe = document.createElement("iframe");
  4566. iframe.name = iframeName;
  4567. iframe.id = iframeName;
  4568. iframe.style.display = "none";
  4569. document.body.appendChild(iframe);
  4570. var cmdName;
  4571. if (isAccessFormalEnv()) {
  4572. cmdName = 'pic_up';
  4573. } else {
  4574. cmdName = 'pic_up_test';
  4575. }
  4576. var uploadApiUrl = "https://pic.tim.qq.com/v4/openpic/" + cmdName + "?tinyid=" + ctx.tinyid + "&a2=" + ctx.a2 + "&sdkappid=" + ctx.sdkAppID + "&accounttype=" + ctx.accountType + "&contenttype=http";
  4577. form.action = uploadApiUrl;
  4578. form.method = 'post';
  4579. //form.enctype='multipart/form-data';//ie8下不起作用,必须由业务自己设置
  4580. form.target = iframeName;
  4581. function createFormInput(name, value) {
  4582. var tempInput = document.createElement("input");
  4583. tempInput.type = "hidden";
  4584. tempInput.name = name;
  4585. tempInput.value = value;
  4586. form.appendChild(tempInput);
  4587. }
  4588. createFormInput("App_Version", SDK.APPID.toString());
  4589. createFormInput("From_Account", ctx.identifier);
  4590. createFormInput("To_Account", toAccount);
  4591. createFormInput("Seq", nextSeq().toString());
  4592. createFormInput("Timestamp", unixtime().toString());
  4593. createFormInput("Random", createRandom().toString());
  4594. createFormInput("Busi_Id", businessType);
  4595. createFormInput("PkgFlag", "0");
  4596. //检测iframe.contentWindow.name是否有值
  4597. function checkFrameName() {
  4598. var resp;
  4599. try {
  4600. resp = JSON.parse(iframe.contentWindow.name) || {};
  4601. } catch (e) {
  4602. resp = {};
  4603. }
  4604. if (resp.ActionStatus) {//上传接口返回
  4605. // We've got what we need. Stop the iframe from loading further content.
  4606. iframe.src = "about:blank";
  4607. iframe.parentNode.removeChild(iframe);
  4608. iframe = null;
  4609. if (resp.ActionStatus == ACTION_STATUS.OK) {
  4610. cbOk && cbOk(resp);
  4611. } else {
  4612. cbErr && cbErr(resp);
  4613. }
  4614. } else {
  4615. setTimeout(checkFrameName, 100);
  4616. }
  4617. }
  4618. setTimeout(checkFrameName, 500);
  4619. form.submit();//提交上传图片表单
  4620. };
  4621. //上传图片(用于高版本浏览器,支持FileAPI)
  4622. this.uploadFile = function (options, cbOk, cbErr) {
  4623. var file_upload = {
  4624. //初始化
  4625. init: function (options, cbOk, cbErr) {
  4626. var me = this;
  4627. me.file = options.file;
  4628. //分片上传进度回调事件
  4629. me.onProgressCallBack = options.onProgressCallBack;
  4630. //停止上传图片按钮
  4631. if (options.abortButton) {
  4632. options.abortButton.onclick = me.abortHandler;
  4633. }
  4634. me.total = me.file.size;//图片总大小
  4635. me.loaded = 0;//已读取字节数
  4636. me.step = 120 * 1024;//分块大小,120K
  4637. me.sliceSize = 0;//分片大小
  4638. me.sliceOffset = 0;//当前分片位置
  4639. me.timestamp = unixtime();//当前时间戳
  4640. me.seq = nextSeq();//请求seq
  4641. me.random = createRandom();//请求随机数
  4642. me.fromAccount = ctx.identifier;//发送者
  4643. me.toAccount = options.To_Account;//接收者
  4644. me.fileMd5 = options.fileMd5;//文件MD5
  4645. me.businessType = options.businessType;//图片业务类型,群消息:1; c2c消息:2; 个人头像:3; 群头像:4;
  4646. me.cbOk = cbOk;//上传成功回调事件
  4647. me.cbErr = cbErr;//上传失败回调事件
  4648. me.reader = new FileReader();//读取文件对象
  4649. me.blobSlice = File.prototype.mozSlice || File.prototype.webkitSlice || File.prototype.slice;//file的slice方法,不同浏览器不一样
  4650. me.reader.onloadstart = me.onLoadStart;//开始读取回调事件
  4651. me.reader.onprogress = me.onProgress;//读取文件进度回调事件
  4652. me.reader.onabort = me.onAbort;//停止读取回调事件
  4653. me.reader.onerror = me.onerror;//读取发生错误回调事件
  4654. me.reader.onload = me.onLoad;//分片加载完毕回调事件
  4655. me.reader.onloadend = me.onLoadEnd;//读取文件完毕回调事件
  4656. },
  4657. //上传方法
  4658. upload: function () {
  4659. var me = file_upload;
  4660. //读取第一块
  4661. me.readBlob(0);
  4662. },
  4663. onLoadStart: function () {
  4664. var me = file_upload;
  4665. },
  4666. onProgress: function (e) {
  4667. var me = file_upload;
  4668. me.loaded += e.loaded;
  4669. if (me.onProgressCallBack) {
  4670. me.onProgressCallBack(me.loaded, me.total);
  4671. }
  4672. },
  4673. onAbort: function () {
  4674. var me = file_upload;
  4675. },
  4676. onError: function () {
  4677. var me = file_upload;
  4678. },
  4679. onLoad: function (e) {
  4680. var me = file_upload;
  4681. if (e.target.readyState == FileReader.DONE) {
  4682. var slice_data_base64 = e.target.result;
  4683. //注意,一定要去除base64编码头部
  4684. var pos = slice_data_base64.indexOf(",");
  4685. if (pos != -1) {
  4686. slice_data_base64 = slice_data_base64.substr(pos + 1);
  4687. }
  4688. //封装上传图片接口的请求参数
  4689. var opt = {
  4690. 'From_Account': me.fromAccount,
  4691. 'To_Account': me.toAccount,
  4692. 'Busi_Id': me.businessType,
  4693. 'File_Str_Md5': me.fileMd5,
  4694. 'PkgFlag': 1,
  4695. 'File_Size': me.total,
  4696. 'Slice_Offset': me.sliceOffset,
  4697. 'Slice_Size': me.sliceSize,
  4698. 'Slice_Data': slice_data_base64,
  4699. 'Seq': me.seq,
  4700. 'Timestamp': me.timestamp,
  4701. 'Random': me.random
  4702. };
  4703. //分片上传图片接口
  4704. proto_uploadPic(opt,
  4705. function (resp) {
  4706. if (resp.IsFinish == 0) {
  4707. me.loaded = resp.Next_Offset;
  4708. if (me.loaded < me.total) {
  4709. me.readBlob(me.loaded);
  4710. } else {
  4711. me.loaded = me.total;
  4712. }
  4713. } else {
  4714. if (me.cbOk) {
  4715. var tempResp = {
  4716. 'ActionStatus': resp.ActionStatus,
  4717. 'ErrorCode': resp.ErrorCode,
  4718. 'ErrorInfo': resp.ErrorInfo,
  4719. 'File_UUID': resp.File_UUID,
  4720. 'URL_INFO': resp.URL_INFO
  4721. };
  4722. me.cbOk(tempResp);
  4723. }
  4724. }
  4725. },
  4726. me.cbErr
  4727. );
  4728. }
  4729. },
  4730. onLoadEnd: function () {
  4731. var me = file_upload;
  4732. },
  4733. //分片读取文件方法
  4734. readBlob: function (start) {
  4735. var me = file_upload;
  4736. var blob, file = me.file;
  4737. var end = start + me.step;
  4738. if (end > me.total) {
  4739. end = me.total;
  4740. me.sliceSize = end - start;
  4741. } else {
  4742. me.sliceSize = me.step;
  4743. }
  4744. me.sliceOffset = start;
  4745. //根据起始和结束位置,分片读取文件
  4746. blob = me.blobSlice.call(file, start, end);
  4747. //将分片的二进制数据转换为base64编码
  4748. me.reader.readAsDataURL(blob);
  4749. },
  4750. abortHandler: function () {
  4751. var me = file_upload;
  4752. if (me.reader) {
  4753. me.reader.abort();
  4754. }
  4755. }
  4756. };
  4757. //读取文件MD5
  4758. getFileMD5(options.file,
  4759. function (fileMd5) {
  4760. log.info('fileMd5: ' + fileMd5);
  4761. options.fileMd5 = fileMd5;
  4762. //初始化上传参数
  4763. file_upload.init(options, cbOk, cbErr);
  4764. //开始上传文件
  4765. file_upload.upload();
  4766. },
  4767. cbErr
  4768. );
  4769. };
  4770. };
  4771. //web im 基础对象
  4772. //常量对象
  4773. //会话类型
  4774. webim.SESSION_TYPE = SESSION_TYPE;
  4775. webim.MSG_MAX_LENGTH = MSG_MAX_LENGTH;
  4776. //c2c消息子类型
  4777. webim.C2C_MSG_SUB_TYPE = C2C_MSG_SUB_TYPE;
  4778. //群消息子类型
  4779. webim.GROUP_MSG_SUB_TYPE = GROUP_MSG_SUB_TYPE;
  4780. //消息元素类型
  4781. webim.MSG_ELEMENT_TYPE = MSG_ELEMENT_TYPE;
  4782. //群提示消息类型
  4783. webim.GROUP_TIP_TYPE = GROUP_TIP_TYPE;
  4784. //图片类型
  4785. webim.IMAGE_TYPE = IMAGE_TYPE;
  4786. //群系统消息类型
  4787. webim.GROUP_SYSTEM_TYPE = GROUP_SYSTEM_TYPE;
  4788. //好友系统通知子类型
  4789. webim.FRIEND_NOTICE_TYPE = FRIEND_NOTICE_TYPE;
  4790. //群提示消息-群资料变更类型
  4791. webim.GROUP_TIP_MODIFY_GROUP_INFO_TYPE = GROUP_TIP_MODIFY_GROUP_INFO_TYPE;
  4792. //浏览器信息
  4793. webim.BROWSER_INFO = BROWSER_INFO;
  4794. //表情对象
  4795. webim.Emotions = webim.EmotionPicData = emotions;
  4796. //表情标识符和index Map
  4797. webim.EmotionDataIndexs = webim.EmotionPicDataIndex = emotionDataIndexs;
  4798. //腾讯登录服务错误码(托管模式)
  4799. webim.TLS_ERROR_CODE = TLS_ERROR_CODE;
  4800. //连接状态
  4801. webim.CONNECTION_STATUS = CONNECTION_STATUS;
  4802. //上传图片业务类型
  4803. webim.UPLOAD_PIC_BUSSINESS_TYPE = UPLOAD_PIC_BUSSINESS_TYPE;
  4804. /**************************************/
  4805. //类对象
  4806. //
  4807. //工具对象
  4808. webim.Tool = tool;
  4809. //控制台打印日志对象
  4810. webim.Log = log;
  4811. //消息对象
  4812. webim.Msg = Msg;
  4813. //会话对象
  4814. webim.Session = Session;
  4815. //会话存储对象
  4816. webim.MsgStore = {
  4817. sessMap: function () { return MsgStore.sessMap(); },
  4818. sessCount: function () { return MsgStore.sessCount(); },
  4819. sessByTypeId: function (type, id) { return MsgStore.sessByTypeId(type, id); },
  4820. delSessByTypeId: function (type, id) { return MsgStore.delSessByTypeId(type, id); },
  4821. resetCookieAndSyncFlag: function () { return MsgStore.resetCookieAndSyncFlag(); }
  4822. };
  4823. /**************************************/
  4824. // webim API impl
  4825. //
  4826. //基本接口
  4827. //登录
  4828. webim.login = webim.init = function (loginInfo, listeners, opts, cbOk, cbErr) {
  4829. //初始化连接状态回调函数
  4830. ConnManager.init(listeners.onConnNotify, cbOk, cbErr);
  4831. //设置ie9以下浏览器jsonp回调
  4832. if (listeners.jsonpCallback) jsonpCallback = listeners.jsonpCallback;
  4833. //登录
  4834. _login(loginInfo, listeners, opts, cbOk, cbErr);
  4835. };
  4836. //登出
  4837. webim.logout = webim.offline = function (cbOk, cbErr) { return proto_logout(cbOk, cbErr); };
  4838. //消息管理接口
  4839. //发消息接口(私聊和群聊)
  4840. webim.sendMsg = function (msg, cbOk, cbErr) { return MsgManager.sendMsg(msg, cbOk, cbErr); };
  4841. //拉取未读c2c消息
  4842. webim.syncMsgs = function (cbOk, cbErr) { return MsgManager.syncMsgs(cbOk, cbErr); };
  4843. //拉取C2C漫游消息
  4844. webim.getC2CHistoryMsgs = function (options, cbOk, cbErr) { return MsgManager.getC2CHistoryMsgs(options, cbOk, cbErr); };
  4845. //拉取群漫游消息
  4846. webim.syncGroupMsgs = function (options, cbOk, cbErr) { return MsgManager.syncGroupMsgs(options, cbOk, cbErr); };
  4847. //上报c2c消息已读
  4848. webim.c2CMsgReaded = function (options, cbOk, cbErr) { return MsgStore.c2CMsgReaded(options, cbOk, cbErr); };
  4849. //上报群消息已读
  4850. webim.groupMsgReaded = function (options, cbOk, cbErr) { return proto_groupMsgReaded(options, cbOk, cbErr); };
  4851. //设置聊天会话自动标记已读
  4852. webim.setAutoRead = function (selSess, isOn, isResetAll) { return MsgStore.setAutoRead(selSess, isOn, isResetAll); };
  4853. //群组管理接口
  4854. //
  4855. //创建群
  4856. webim.createGroup = function (options, cbOk, cbErr) { return proto_createGroup(options, cbOk, cbErr); };
  4857. //创建群-高级接口
  4858. webim.createGroupHigh = function (options, cbOk, cbErr) { return proto_createGroupHigh(options, cbOk, cbErr); };
  4859. //申请加群
  4860. webim.applyJoinGroup = function (options, cbOk, cbErr) { return proto_applyJoinGroup(options, cbOk, cbErr); };
  4861. //处理加群申请(同意或拒绝)
  4862. webim.handleApplyJoinGroupPendency = function (options, cbOk, cbErr) { return proto_handleApplyJoinGroupPendency(options, cbOk, cbErr); };
  4863. //删除加群申请
  4864. webim.deleteApplyJoinGroupPendency = function (options, cbOk, cbErr) { return proto_deleteC2CMsg(options, cbOk, cbErr); };
  4865. //主动退群
  4866. webim.quitGroup = function (options, cbOk, cbErr) { return proto_quitGroup(options, cbOk, cbErr); };
  4867. //获取群组公开资料-用于搜索群
  4868. webim.getGroupPublicInfo = function (options, cbOk, cbErr) { return proto_getGroupPublicInfo(options, cbOk, cbErr); };
  4869. //获取群组详细资料-高级接口
  4870. webim.getGroupInfo = function (options, cbOk, cbErr) { return proto_getGroupInfo(options, cbOk, cbErr); };
  4871. //修改群基本资料
  4872. webim.modifyGroupBaseInfo = function (options, cbOk, cbErr) { return proto_modifyGroupBaseInfo(options, cbOk, cbErr); };
  4873. //获取群成员列表
  4874. webim.getGroupMemberInfo = function (options, cbOk, cbErr) { return proto_getGroupMemberInfo(options, cbOk, cbErr); };
  4875. //邀请好友加群
  4876. webim.addGroupMember = function (options, cbOk, cbErr) { return proto_addGroupMember(options, cbOk, cbErr); };
  4877. //修改群成员资料
  4878. webim.modifyGroupMember = function (options, cbOk, cbErr) { return proto_modifyGroupMember(options, cbOk, cbErr); };
  4879. //删除群成员
  4880. webim.deleteGroupMember = function (options, cbOk, cbErr) { return proto_deleteGroupMember(options, cbOk, cbErr); };
  4881. //解散群
  4882. webim.destroyGroup = function (options, cbOk, cbErr) { return proto_destroyGroup(options, cbOk, cbErr); };
  4883. //获取我的群组列表-高级接口
  4884. webim.getJoinedGroupListHigh = function (options, cbOk, cbErr) { return proto_getJoinedGroupListHigh(options, cbOk, cbErr); };
  4885. //获取群成员角色
  4886. webim.getRoleInGroup = function (options, cbOk, cbErr) { return proto_getRoleInGroup(options, cbOk, cbErr); };
  4887. //设置群成员禁言时间
  4888. webim.forbidSendMsg = function (options, cbOk, cbErr) { return proto_forbidSendMsg(options, cbOk, cbErr); };
  4889. //发送自定义群系统通知
  4890. webim.sendCustomGroupNotify = function (options, cbOk, cbErr) { return proto_sendCustomGroupNotify(options, cbOk, cbErr); };
  4891. //进入大群
  4892. webim.applyJoinBigGroup = function (options, cbOk, cbErr) { return proto_applyJoinBigGroup(options, cbOk, cbErr); };
  4893. //退出大群
  4894. webim.quitBigGroup = function (options, cbOk, cbErr) { return proto_quitBigGroup(options, cbOk, cbErr); };
  4895. //资料关系链管理接口
  4896. //
  4897. //获取个人资料接口,可用于搜索用户
  4898. webim.getProfilePortrait = function (options, cbOk, cbErr) { return proto_getProfilePortrait(options, cbOk, cbErr); };
  4899. //设置个人资料
  4900. webim.setProfilePortrait = function (options, cbOk, cbErr) { return proto_setProfilePortrait(options, cbOk, cbErr); };
  4901. //申请加好友
  4902. webim.applyAddFriend = function (options, cbOk, cbErr) { return proto_applyAddFriend(options, cbOk, cbErr); };
  4903. //获取好友申请列表
  4904. webim.getPendency = function (options, cbOk, cbErr) { return proto_getPendency(options, cbOk, cbErr); };
  4905. //删除好友申请
  4906. webim.deletePendency = function (options, cbOk, cbErr) { return proto_deletePendency(options, cbOk, cbErr); };
  4907. //处理好友申请
  4908. webim.responseFriend = function (options, cbOk, cbErr) { return proto_responseFriend(options, cbOk, cbErr); };
  4909. //获取我的好友
  4910. webim.getAllFriend = function (options, cbOk, cbErr) { return proto_getAllFriend(options, cbOk, cbErr); };
  4911. //删除好友
  4912. webim.deleteFriend = function (options, cbOk, cbErr) { return proto_deleteFriend(options, cbOk, cbErr); };
  4913. //拉黑
  4914. webim.addBlackList = function (options, cbOk, cbErr) { return proto_addBlackList(options, cbOk, cbErr); };
  4915. //删除黑名单
  4916. webim.deleteBlackList = function (options, cbOk, cbErr) { return proto_deleteBlackList(options, cbOk, cbErr); };
  4917. //获取我的黑名单
  4918. webim.getBlackList = function (options, cbOk, cbErr) { return proto_getBlackList(options, cbOk, cbErr); };
  4919. //图片服务接口
  4920. //
  4921. //上传图片接口(高版本浏览器)
  4922. webim.uploadPic = function (options, cbOk, cbErr) {
  4923. return FileUploder.uploadFile(options, cbOk, cbErr);
  4924. };
  4925. //提交上传图片表单接口(用于低版本ie)
  4926. webim.submitUploadFileForm = function (options, cbOk, cbErr) {
  4927. return FileUploder.submitUploadFileForm(options, cbOk, cbErr);
  4928. };
  4929. //设置jsonp返回的值
  4930. webim.setJsonpLastRspData = function (rspData) {
  4931. jsonpLastRspData = typeof (rspData) == "string" ? JSON.parse(rspData) : rspData;
  4932. };
  4933. })(webim);