コード例 #1
0
        CommandMessageContainer IFileSelector.GetDataFromFile()
        {
            var transportContainer = new CommandMessageContainer(CommandType.SendFile);
            var ofd = new OpenFileDialog {
                Multiselect = false
            };

            if (DialogResult.OK == (new Invoker(ofd).Invoke()))
            {
                var fileName    = ofd.FileName;
                var byteData    = File.ReadAllBytes(fileName);
                var byteMessage = Convert.ToBase64String(byteData);

                var wordArray = fileName.Split('.');
                var extension = wordArray[wordArray.Length - 1];

                transportContainer.Args["File"]      = byteMessage;
                transportContainer.Args["Extension"] = extension;
            }
            else
            {
                Console.WriteLine("File choosing failed.");
            }

            return(transportContainer);
        }
コード例 #2
0
        void ISender.Here()
        {
            var transportContainer = new CommandMessageContainer(CommandType.Here);

            var transportContainerString = JsonConvert.SerializeObject(transportContainer);
            var byteString = Encoding.UTF8.GetBytes(transportContainerString);

            stream.Write(byteString, 0, byteString.Length);
        }
コード例 #3
0
        void ISender.SendFile(CommandMessageContainer transportContainer, string recipientName = null)
        {
            transportContainer.Args["Recipient"] = recipientName;

            var transportContainerString = JsonConvert.SerializeObject(transportContainer);
            var byteString = Encoding.UTF8.GetBytes(transportContainerString);

            stream.Write(byteString, 0, byteString.Length);
        }
コード例 #4
0
        void IChatCore.CommandHandle(CommandMessageContainer commandMessage)
        {
            switch (commandMessage.Command)
            {
            case CommandType.Start:
                if (commandMessage.Args.ContainsKey("AccessToken"))
                {
                    accessTokenStorage.Set(commandMessage.Args["AccessToken"].ToString());
                }
                break;

            case CommandType.SetUsername:
                if (commandMessage.Args.ContainsKey("Name") && !string.IsNullOrEmpty(commandMessage.Args["Name"].ToString()))
                {
                    displayMessageService.Write($"Username successfully changed. Your current username: {commandMessage.Args["Name"].ToString()}");
                }
                else
                {
                    displayMessageService.Write("Enter the name after /setusername command.");
                }
                break;

            case CommandType.Here:
                if (commandMessage.Args.ContainsKey("Users"))
                {
                    displayMessageService.Write(commandMessage.Args["Users"].ToString());
                }
                break;

            case CommandType.SendFile:
                if (commandMessage.Args.ContainsKey("File") && commandMessage.Args.ContainsKey("Extension"))
                {
                    var byteString = Convert.FromBase64String(commandMessage.Args["File"].ToString());
                    var filename   = $"{Guid.NewGuid().ToString()}.{commandMessage.Args["Extension"].ToString()}";

                    File.WriteAllBytes(filename, byteString);
                }

                break;

            case CommandType.Ping:
                sender.Pong(commandMessage.Args);
                break;

            case CommandType.Pong:
                if (commandMessage.Args.ContainsKey("ID") &&
                    Int32.Parse(commandMessage.Args["ID"].ToString()) == pingIdGenerator.CurrentPingIdGenerator)
                {
                    pingIdGenerator.PingAnswered = true;
                }
                break;

            default:
                break;
            }
        }
コード例 #5
0
        void ISender.SetUsername(string name)
        {
            var transportContainer = new CommandMessageContainer(CommandType.SetUsername);

            transportContainer.Args["Name"] = name;

            var transportContainerString = JsonConvert.SerializeObject(transportContainer);
            var byteString = Encoding.UTF8.GetBytes(transportContainerString);

            stream.Write(byteString, 0, byteString.Length);
        }
コード例 #6
0
        void ISender.AuthorizeRequest()
        {
            var transportContainer = new CommandMessageContainer(CommandType.Start);

            transportContainer.Args["AccessToken"] = accessTokenStorage.Get();

            var transportContainerString = JsonConvert.SerializeObject(transportContainer);
            var byteString = Encoding.UTF8.GetBytes(transportContainerString);

            stream.Write(byteString, 0, byteString.Length);
        }
コード例 #7
0
        void ISender.Ping(ClientConnection connection, int ID)
        {
            var transportContainer = new CommandMessageContainer(CommandType.Ping);

            transportContainer.Args["ID"] = ID;
            var transportContainerJsonString = JsonConvert.SerializeObject(transportContainer);

            var byteString = Encoding.UTF8.GetBytes(transportContainerJsonString);

            connection.Stream.Write(byteString, 0, byteString.Length);

            logger.Write(transportContainerJsonString);
        }
コード例 #8
0
        void ISender.StartCallback(ClientConnection connection)
        {
            var transportContainer = new CommandMessageContainer(CommandType.Start);

            transportContainer.Args["AccessToken"] = connection.UserObject.AccessToken;
            var transportContainerJsonString = JsonConvert.SerializeObject(transportContainer);

            var byteString = Encoding.UTF8.GetBytes(transportContainerJsonString);

            connection.Stream.Write(byteString, 0, byteString.Length);

            logger.Write(transportContainerJsonString);
        }
コード例 #9
0
        void ISender.SetUsernameCallback(ClientConnection connection, string username)
        {
            var transportContainer = new CommandMessageContainer(CommandType.SetUsername);

            transportContainer.Args["Name"] = username;

            var transportContainerJsonString = JsonConvert.SerializeObject(transportContainer);

            var byteString = Encoding.UTF8.GetBytes(transportContainerJsonString);

            connection.Stream.Write(byteString, 0, byteString.Length);

            logger.Write(transportContainerJsonString);
        }
コード例 #10
0
        void ISender.FileToAll(ClientConnection connection, CommandMessageContainer transportContainer)
        {
            var connections            = connectionsService.Connections;
            var transportContainerJson = JsonConvert.SerializeObject(transportContainer);
            var byteString             = Encoding.UTF8.GetBytes(transportContainerJson);

            foreach (var connectionItem in connections)
            {
                if (connectionItem != connection)
                {
                    connectionItem.Stream.Write(byteString, 0, byteString.Length);
                }
            }
            logger.Write("File sended.");
        }
コード例 #11
0
        void ISender.FileToRecipient(string recipientName, CommandMessageContainer transportContainer)
        {
            var recipientConnections = connectionsService.Connections
                                       .Where(u => u.UserObject.Name == recipientName);

            var transportContainerJson = JsonConvert.SerializeObject(transportContainer);
            var byteString             = Encoding.UTF8.GetBytes(transportContainerJson);

            foreach (var recipientConnection in recipientConnections)
            {
                recipientConnection.Stream.Write(byteString, 0, byteString.Length);
            }

            logger.Write("File sended.");
        }
コード例 #12
0
        void ISender.HereCallback(ClientConnection connection, string[] usersNames)
        {
            var usersNamesString = string.Join(",", usersNames);

            logger.Write(usersNamesString);
            var transportContainer = new CommandMessageContainer(CommandType.Here);

            transportContainer.Args["Users"] = usersNamesString;

            var transportContainerJsonString = JsonConvert.SerializeObject(transportContainer);

            var byteString = Encoding.UTF8.GetBytes(transportContainerJsonString);

            connection.Stream.Write(byteString, 0, byteString.Length);

            logger.Write(transportContainerJsonString);
        }
コード例 #13
0
        void ISender.Ping()
        {
            if (pingIdGenerator.PingAnswered)
            {
                pingIdGenerator.PingAnswered = false;
                var transportContainer = new CommandMessageContainer(CommandType.Ping);
                transportContainer.Args["ID"] = pingIdGenerator.NextPingIdGenerator;

                var transportContainerString = JsonConvert.SerializeObject(transportContainer);
                var byteString = Encoding.UTF8.GetBytes(transportContainerString);
                stream.Write(byteString, 0, byteString.Length);
            }
            else
            {
                disconnector.Disconnect();
            }
        }
コード例 #14
0
        void ISender.BroadcastFile(ClientConnection connection, JObject Args)
        {
            var transportContainer = new CommandMessageContainer(CommandType.SendFile);

            if (Args != null && Args.ContainsKey("Extension") && Args.ContainsKey("File"))
            {
                transportContainer.Args["File"]      = Args["File"].ToString();
                transportContainer.Args["Extension"] = Args["Extension"].ToString();
            }
            else
            {
                self.ServerNotification(connection, "Incorrect Args.");
                return;
            }

            if (Args.ContainsKey("Recipient"))
            {
                if (self.RecipientIsValid(Args))
                {
                    self.FileToRecipient(Args["Recipient"].ToString(), transportContainer);

                    var recipientId = connectionsService.Connections.FirstOrDefault(u => u.UserObject.Name == Args["Recipient"].ToString()).UserObject.ID;
                    dataStorage.SaveFile(connection.UserObject.ID, recipientId,
                                         Convert.FromBase64String(Args["File"].ToString()),
                                         Args["Extension"].ToString());
                }
            }
            else
            {
                self.FileToAll(connection, transportContainer);

                dataStorage.SaveFile(connection.UserObject.ID,
                                     0, Convert.FromBase64String(Args["File"].ToString()),
                                     Args["Extension"].ToString());
            }
        }