示例#1
0
 private void OnDataMessage(DataMessageStanza dataMessageStanza)
 {
     if (persistentIds.Add(dataMessageStanza.PersistentId))
     {
         DecriptData(dataMessageStanza);
     }
 }
示例#2
0
        private void DecriptData(DataMessageStanza dataMessageStanza)
        {
            string cryptoKey = dataMessageStanza.AppData.Where(item => item.Key == "crypto-key").Select(item => item.Value).FirstOrDefault();
            string salt      = dataMessageStanza.AppData.Where(item => item.Key == "encryption").Select(item => item.Value).FirstOrDefault();

            if (cryptoKey != null && salt != null)
            {
                byte[] cryptoKeyBytes = UrlSafeBase64Convertor.FromBase64(cryptoKey.Substring(3));
                byte[] saltBytes      = UrlSafeBase64Convertor.FromBase64(salt.Substring(5));
                var    decryptedBytes = cryptography.Decrypt(dataMessageStanza.RawData.ToByteArray(), cryptoKeyBytes, saltBytes);

                Volatile.Read(ref MessageReceived)?.Invoke(this, Encoding.UTF8.GetString(decryptedBytes));
            }
            else
            {
                if (cryptoKey != null)
                {
                    Debug.WriteLine("CryptoKey is missing");
                }

                if (salt != null)
                {
                    Debug.WriteLine("salt is missing");
                }
            }
        }
示例#3
0
        private void onReceiveData(DataMessageStanza proto)
        {
            try {
                //var lresp = DataMessageStanza.Parser.ParseFrom(msg.ToArray());

                //dms = mcs_pb2.DataMessageStanza();
                //dms.ParseFromString(msg);
                util.debugWriteLine("RECV DATA MESSAGE " + proto);                //lresp.Id + " time " + lresp.ServerTimestamp + " streamid " + lresp.StreamId + " ");
                //var lvid = util.getRegGroup(lresp.AppData.ToString(), "\"lvid\"[\\s\\S]+(lv\\d+)");
                //var lvid = util.getRegGroup(lresp.AppData.ToString(), "\"program_id\":\"(lv\\d+)");
                var d = "";
                foreach (var a in proto.AppDatas)
                {
                    d += a.Value;
                }
                //var lvid = util.getRegGroup(d, "program_id\\\\\":\\\\\"(lv\\d+)"); google protobuf
                var lvid = util.getRegGroup(d, "program_id\":\"(lv\\d+)");                 //google protobuf
                if (lvid != null)
                {
                    if (check.checkedLvIdList.Find(x => x.lvId == lvid) != null)
                    {
                        return;
                    }

                    util.debugWriteLine("app push appData lvid " + lvid);
                    var items = getNicoCasItem(lvid, proto);
                    if (items != null)
                    {
                        check.foundLive(items);
                    }
                    else
                    {
                        var gir = new GetItemRetryApr(lvid, proto, this);
                        Task.Factory.StartNew(() => {
                            for (var i = 0; i < 10; i++)
                            {
                                Thread.Sleep(5000);
                                items = gir.getItem();
                                if (items == null)
                                {
                                    continue;
                                }
                                check.foundLive(items);
                                break;
                            }
                        });
                    }
                }
            } catch (Exception ee) {
                util.debugWriteLine(ee.Message + ee.Source + ee.StackTrace + ee.TargetSite);
            }
        }