Exemple #1
0
        private void DoReceive_Command()
        {
            byte[] data = new byte[GlobalRuntime.CommandTcpClient.Client.ReceiveBufferSize];

            while (true)
            {
                receiveSignal_Command.Reset();

                GlobalRuntime.CommandTcpClient.Client.BeginReceive(data, 0, data.Length, SocketFlags.None, asyncResult =>
                {
                    int length = 0;
                    try
                    {
                        length = GlobalRuntime.CommandTcpClient.Client.EndReceive(asyncResult);
                    }
                    catch
                    {
                        return;
                    }

                    string command = System.Text.Encoding.Default.GetString(data, 0, length).TrimEnd("\r\n".ToCharArray());

                    if (NewTextMessageArrival != null)
                    {
                        NewTextMessageArrival.Invoke(command);
                    }

                    receiveSignal_Command.Set();


                    string[] parsedCommand = command.Split(',');
                    string cmd             = parsedCommand[0].ToLower().Trim();
                    switch (cmd)
                    {
                    case "ok":
                        //nothing to do
                        break;

                    case "filelist":
                        string[] files = parsedCommand[1].Trim().Split('|');
                        if (this.FileListMessageArrival != null)
                        {
                            this.FileListMessageArrival.Invoke(files.ToList());
                        }
                        break;

                    case "transfer-confirmed":
                        long fileSize = long.Parse(parsedCommand[1]);
                        if (this.FileTransferRequestConfirmed != null)
                        {
                            this.FileTransferRequestConfirmed.Invoke(fileSize);
                        }
                        confirmedLength = fileSize;
                        SendTextMessage("Transfer-launch");
                        break;

                    default:
                        break;
                    }
                }, null);
                receiveSignal_Command.WaitOne();
            }
        }
Exemple #2
0
        private void ReadyReceive()
        {
            while (true)
            {
                receiveSignal_Command.Reset();

                byte[] data = new byte[CommandTcpClient.Client.ReceiveBufferSize];
                CommandTcpClient.Client.BeginReceive(data, 0, data.Length, SocketFlags.None, asyncResult =>
                {
                    int length = 0;
                    try
                    {
                        length = CommandTcpClient.Client.EndReceive(asyncResult);
                        if (length <= 0)                                                                                //invalid command
                        {
                            return;
                        }
                    }
                    catch
                    {
                        return;
                    }

                    string[] commands = ParseAllCommands(System.Text.Encoding.Default.GetString(data, 0, length).TrimEnd("\r\n".ToCharArray()));
                    foreach (string command in commands)
                    {
                        if (command.Trim().Length == 0)
                        {
                            continue;
                        }

                        if (NewTextMessageArrival != null)
                        {
                            NewTextMessageArrival.Invoke(CommandTcpClient.Client.RemoteEndPoint.ToString(), command);
                        }

                        receiveSignal_Command.Set();


                        string[] parsedCommand = command.Split(',');
                        string cmd             = parsedCommand[0].ToLower().Trim();
                        switch (cmd)
                        {
                        case "hello":
                            SendTextMessage("OK");
                            break;

                        case "list":
                            string filelist = "";
                            string[] files  = System.IO.Directory.GetFiles(GlobalRuntime.BaseDirectory);
                            foreach (string file in files)
                            {
                                filelist = file + "|" + filelist;
                            }
                            filelist = filelist.TrimEnd(':');
                            SendTextMessage("FILELIST", filelist);
                            break;

                        case "transfer-request":
                            if (!File.Exists(parsedCommand[1].Trim()))
                            {
                                SendTextMessage("ERROR", "File not found");
                                break;
                            }
                            transfer_filePath = parsedCommand[1].Trim();
                            FileInfo fi       = new FileInfo(parsedCommand[1].Trim());
                            SendTextMessage("TRANSFER-CONFIRMED", fi.Length.ToString());
                            break;

                        case "transfer-launch":
                            StartTransferFile();
                            break;

                        default:
                            SendTextMessage("ERROR", "Unknow command");
                            break;
                        }
                    }
                }, null);
                receiveSignal_Command.WaitOne();
            }
        }