Exemplo n.º 1
0
        /// <summary>
        /// Sends a file that is larger than the size specified in InputshareLib.Settings.NetworkMessageChunkSize
        /// </summary>
        /// <param name="message"></param>
        private void SendLargeMessage(NetworkMessage message)
        {
            Task.Run(() => {
                byte[] data     = message.ToBytes();
                Guid transferId = Guid.NewGuid();

                int hPos = 0;
                int hRem = data.Length;
                do
                {
                    int partLen = Settings.NetworkMessageChunkSizeNoHeader;
                    if (hRem - partLen < 0)
                    {
                        partLen = hRem;
                    }

                    byte[] part = new byte[partLen];
                    Buffer.BlockCopy(data, hPos, part, 0, partLen);
                    MessageChunkMessage chunk = new MessageChunkMessage(transferId, part, data.Length);
                    SendMessage(chunk);

                    hPos += partLen;
                    hRem -= partLen;
                } while (hRem > 0);
            });
        }
Exemplo n.º 2
0
        /// <summary>
        /// Called when the socket receives a message chunk, and stores
        /// it in the appropriate LargeMessageHandler based on the message GUID
        /// </summary>
        /// <param name="message"></param>
        private void HandleMessageChunkReceived(MessageChunkMessage message)
        {
            LargeMessageHandler handler = GetMessageHandlerFromId(message.MessageId);

            if (handler == null)
            {
                //ISLogger.Write("Incoming large packet (" + message.MessageSize / 1024 + "KB)");
                handler = new LargeMessageHandler(message.MessageId, message.MessageSize);
                messageHandlers.Add(handler);
            }

            handler.Write(message.MessageData);

            if (handler.FullyReceived)
            {
                byte[] data = handler.ReadAndClose();
                messageHandlers.Remove(handler);
                HandleReceivedMessage(message.MessageSize, data);
            }
        }