Ejemplo n.º 1
0
        /// <summary>
        ///     Indicate activity
        /// </summary>
        /// <param name="threadId">Thread id</param>
        /// <param name="isActive">Active status</param>
        public async Task <IResult <bool> > IndicateActivityAsync(string threadId, bool isActive)
        {
            try
            {
                var token = ExtensionHelper.GetThreadToken();

                var data = new Dictionary <string, string>
                {
                    { "action", "indicate_activity" },
                    { "item_type", "indicate_activity" },
                    { "thread_id", threadId },
                    { "client_context", token },
                    { "activity_status", isActive ? "1" : "0" },
                };
                var json          = JsonConvert.SerializeObject(data);
                var bytes         = Encoding.UTF8.GetBytes(json);
                var publishPacket = new PublishPacket(QualityOfService.AtLeastOnce, false, false)
                {
                    Payload   = ZlibHelper.Compress(bytes).AsBuffer(),
                    PacketId  = (ushort)CryptographicBuffer.GenerateRandomNumber(),
                    TopicName = "132"
                };
                await FbnsPacketEncoder.EncodePacket(publishPacket, _outboundWriter);

                return(Result.Success(true));
            }
            catch (SocketException socketException)
            {
                return(Result.Fail(socketException, default(bool), ResponseType.NetworkProblem));
            }
            catch (Exception exception)
            {
                return(Result.Fail <bool>(exception));
            }
        }
Ejemplo n.º 2
0
        private async Task <IResult <InstaDirectRespondPayload> > SendDirectItem(Dictionary <string, string> dic, string token = null)
        {
            try
            {
                if (string.IsNullOrEmpty(token))
                {
                    token = ExtensionHelper.GetThreadToken();
                }

                var data = new Dictionary <string, string>
                {
                    { "action", "send_item" },
                    { "client_context", token },
                };
                foreach (var item in dic)
                {
                    data.Add(item.Key, item.Value);
                }
                var json  = JsonConvert.SerializeObject(data);
                var bytes = Encoding.UTF8.GetBytes(json);

                //id: '132',
                //path: '/ig_send_message',
                var publishPacket = new PublishPacket(QualityOfService.AtLeastOnce, false, false)
                {
                    Payload   = ZlibHelper.Compress(bytes).AsBuffer(),
                    PacketId  = (ushort)CryptographicBuffer.GenerateRandomNumber(),
                    TopicName = "132"
                };
                await FbnsPacketEncoder.EncodePacket(publishPacket, _outboundWriter);

                await Task.Delay(WaitForResponseDelay);

                var responseItem = Responses.GetItem(token);
                if (responseItem != null)
                {
                    Responses.Remove(responseItem);
                    return(responseItem.IsSucceed ?
                           Result.Success(ConvertersFabric.Instance.GetDirectRespondConverter(responseItem).Convert().Payload) :
                           Result.Fail(responseItem.Payload?.Message, ConvertersFabric.Instance
                                       .GetDirectRespondConverter(responseItem).Convert().Payload));
                }
                else
                {
                    return(Result.Fail <InstaDirectRespondPayload>("Couldn't get any response in the waiting time...\nMessage might sent after this period"));
                }
            }
            catch (SocketException socketException)
            {
                return(Result.Fail(socketException, default(InstaDirectRespondPayload), ResponseType.NetworkProblem));
            }
            catch (Exception exception)
            {
                return(Result.Fail <InstaDirectRespondPayload>(exception));
            }
        }
Ejemplo n.º 3
0
 public static CachedObject FromCacheHint(CachedHint cacheInfo, byte[] data)
 {
     return(new CachedObject
     {
         NodeID = cacheInfo.NodeID,
         ObjectID = cacheInfo.ObjectID,
         Shared = 1,
         Compressed = 1,
         Cache = new PyBuffer(ZlibHelper.Compress(data)),
         Timestamp = cacheInfo.CacheTime,
         Version = cacheInfo.Version
     });
 }
Ejemplo n.º 4
0
        public static PyCachedObject FromCacheHint(PyCacheHint cacheInfo, byte[] data)
        {
            PyCachedObject cachedObject = new PyCachedObject();

            cachedObject.NodeID     = cacheInfo.NodeID;
            cachedObject.ObjectID   = cacheInfo.ObjectID;
            cachedObject.Shared     = 1;
            cachedObject.Compressed = 1;
            cachedObject.Cache      = new PyBuffer(ZlibHelper.Compress(data));
            cachedObject.Timestamp  = cacheInfo.CacheTime;
            cachedObject.Version    = cacheInfo.Version;

            return(cachedObject);
        }
Ejemplo n.º 5
0
        public static PyCachedObject FromCacheHint(PyCacheHint cacheInfo, PyDataType data)
        {
            PyCachedObject cachedObject = new PyCachedObject();

            cachedObject.NodeID     = cacheInfo.NodeID;
            cachedObject.ObjectID   = cacheInfo.ObjectID;
            cachedObject.Shared     = 1;
            cachedObject.Compressed = 1;
            cachedObject.Cache      = new PyBuffer(ZlibHelper.Compress(PythonTypes.Marshal.Marshal.ToByteArray(data)));
            cachedObject.Timestamp  = cacheInfo.CacheTime;
            cachedObject.Version    = cacheInfo.Version;

            return(cachedObject);
        }
Ejemplo n.º 6
0
        public async Task <IResult <bool> > LikeThreadMessageAsync(string threadId, string itemId)
        {
            try
            {
                var token = /* ExtensionHelper.GetThreadToken()*/ Guid.NewGuid().ToString();
//item_type=reaction&
//reaction_type=like&
//action=send_item&
//thread_ids=[340282366841710300949128148722678938640]&
//client_context=6687326311760832960&
//_csrftoken=tmqdvmqM1YjSauVdSOpIPnbCW3d2Dxxh&
//mutation_token=6687326311760832960&
//_uuid=fe3634e6-d3ec-4f01-943e-20381fdd9e19&
//node_type=item&
//reaction_status=created&
//item_id=29414953485080962978249978855555072&
//device_id=android-35b3eb8488e1e15c
                var data = new Dictionary <string, string>
                {
                    { "action", "send_item" },
                    { "item_type", "reaction" },
                    { "reaction_type", "like" },
                    { "node_type", "item" },
                    { "reaction_status", "created" },
                    { "thread_id", threadId },
                    { "client_context", token },
                    { "item_id", itemId },
                };
                var json          = JsonConvert.SerializeObject(data);
                var bytes         = Encoding.UTF8.GetBytes(json);
                var publishPacket = new PublishPacket(QualityOfService.AtLeastOnce, false, false)
                {
                    Payload   = ZlibHelper.Compress(bytes).AsBuffer(),
                    PacketId  = (ushort)CryptographicBuffer.GenerateRandomNumber(),
                    TopicName = "132"
                };
                await FbnsPacketEncoder.EncodePacket(publishPacket, _outboundWriter);

                return(Result.Success(true));
            }
            catch (SocketException socketException)
            {
                return(Result.Fail(socketException, default(bool), ResponseType.NetworkProblem));
            }
            catch (Exception exception)
            {
                return(Result.Fail <bool>(exception));
            }
        }
Ejemplo n.º 7
0
        public async Task <IResult <bool> > ReactionMessageAsync(string threadId, string itemId, string emoji)
        {
            try
            {
                //{"action":"item_ack","status_code":"404","payload":{"client_context":"6687658745131972483","message":"target item is not supported"},"status":"fail"}

                //{"action":"item_ack","status_code":"400","payload":{"client_context":"6685052289622163080","message":"unknown reaction type"},"status":"fail"}
                var token = ExtensionHelper.GetThreadToken();
                var data  = new Dictionary <string, string>
                {
                    { "action", "send_item" },
                    { "item_type", "reaction" },
                    { "reaction_type", "like" },
                    { "node_type", "item" },
                    { "reaction_status", "created" },
                    { "thread_id", threadId },
                    { "client_context", token },
                    { "item_id", itemId },
                    { "emoji", emoji },
                };
                var json          = JsonConvert.SerializeObject(data);
                var bytes         = Encoding.UTF8.GetBytes(json);
                var publishPacket = new PublishPacket(QualityOfService.AtLeastOnce, false, false)
                {
                    Payload   = ZlibHelper.Compress(bytes).AsBuffer(),
                    PacketId  = (ushort)CryptographicBuffer.GenerateRandomNumber(),
                    TopicName = "132"
                };
                await FbnsPacketEncoder.EncodePacket(publishPacket, _outboundWriter);

                return(Result.Success(true));
            }
            catch (SocketException socketException)
            {
                return(Result.Fail(socketException, default(bool), ResponseType.NetworkProblem));
            }
            catch (Exception exception)
            {
                return(Result.Fail <bool>(exception));
            }
        }
Ejemplo n.º 8
0
        /// <summary>
        /// Sends a PyObject through this socket
        /// </summary>
        /// <param name="packet">The packet data to send</param>
        public void Send(PyDataType packet)
        {
#if DEBUG
            this.mPacketLog.Trace(PrettyPrinter.FromDataType(packet));
#endif
            // marshal the packet first
            byte[] encodedPacket = PythonTypes.Marshal.Marshal.ToByteArray(packet);

            // compress the packet if it exceeds the maximum size
            if (encodedPacket.Length > Constants.Network.MAX_PACKET_SIZE)
            {
                encodedPacket = ZlibHelper.Compress(encodedPacket);
            }

            // generate the final buffer
            byte[] packetBuffer = new byte[encodedPacket.Length + sizeof(int)];

            // write the packet size and the buffer to the new buffer
            Buffer.BlockCopy(BitConverter.GetBytes(encodedPacket.Length), 0, packetBuffer, 0, sizeof(int));
            Buffer.BlockCopy(encodedPacket, 0, packetBuffer, sizeof(int), encodedPacket.Length);

            // after processing the whole packet queue the actual data
            this.Send(packetBuffer);
        }
Ejemplo n.º 9
0
        /// <summary>
        /// Sends a PyObject through this socket
        /// </summary>
        /// <param name="packet">The packet data to send</param>
        public void Send(PyDataType packet)
        {
#if DEBUG
            this.mPacketLog.Trace(PrettyPrinter.FromDataType(packet));
#endif

            MemoryStream stream = new MemoryStream();
            BinaryWriter writer = new BinaryWriter(stream);
            // marshal the packet first
            byte[] encodedPacket = PythonTypes.Marshal.Marshal.ToByteArray(packet);

            // compress the packet if it exceeds the maximum size
            if (encodedPacket.Length > Constants.Network.MAX_PACKET_SIZE)
            {
                encodedPacket = ZlibHelper.Compress(encodedPacket);
            }

            // write the size to the stream
            writer.Write(encodedPacket.Length);
            // finally copy the packet buffer
            writer.Write(encodedPacket);
            // after processing the whole packet queue the actual data
            this.Send(stream.ToArray());
        }