private static void WriteCommand(dynamic dynamicElement, Command command)
        {
            switch (command.CommandType)
            {
            case CommandType.Login:
                LoginCommand loginCommand = (LoginCommand)command;
                dynamicElement.command.userInfo.name = loginCommand.UserInfo.Name;
                break;

            case CommandType.Ack:
                AckCommand ackCommand = (AckCommand)command;
                dynamicElement.command.messageId = ackCommand.MessageId;
                break;

            case CommandType.UserState:
                UserStateCommand userStateCommand = (UserStateCommand)command;
                dynamicElement.command.userInfo.name = userStateCommand.UserInfo.Name;
                dynamicElement.command.userState     = userStateCommand.UserState;
                break;

            case CommandType.TextMessage:
                TextMessageCommand textMessageCommand = (TextMessageCommand)command;
                dynamicElement.command.from.userInfo.name = textMessageCommand.From.Name;
                dynamicElement.command.to.userInfo.name   = textMessageCommand.To.Name;
                dynamicElement.command.textMessage        = textMessageCommand.Message;
                break;

            default:
                throw new InvalidOperationException("Unsupported command type: " + command.CommandType);
            }
        }
示例#2
0
        public void UserStateCommandTest()
        {
            string stringMessage =
                @"<message>
  <version>1</version>
  <messageId>123</messageId>
  <command type=""UserState"">
    <userInfo>
      <name>Another user name</name>
    </userInfo>
    <userState>Some user state</userState>
  </command>
 </message>";

            XElement xml = XElement.Parse(stringMessage);
            DynamicXmlMessageConverter converter = new DynamicXmlMessageConverter();
            Message message = converter.ConvertFromXml(xml);

            // Checking command
            Command command = message.Command;

            Assert.That(command.CommandType, Is.EqualTo(CommandType.UserState));

            UserStateCommand userStateCommand = (UserStateCommand)command;
            UserInfo         userInfo         = userStateCommand.UserInfo;

            Assert.That(userInfo.Name, Is.EqualTo("Another user name"));

            string userState = userStateCommand.UserState;

            Assert.That(userState, Is.EqualTo("Some user state"));
        }
示例#3
0
        private void HandleUserStateCommand(long incomingMessageId, UserStateCommand command)
        {
            using (usersSync.UseReadLock())
            {
                var userInfo = users.SingleOrDefault(ui => ui.UserInfo.Name == command.UserInfo.Name);
                if (userInfo == null)
                {
                    // Nothing to handle. This user unknown
                    return;
                }

                userInfo.ChangeUserState(command.UserState);
                SendUpdatedUserState(userInfo);
            }
        }
示例#4
0
        private void SendUpdatedUserState(FullUserInfo userInfo)
        {
            Contract.Requires(userInfo != null);
            // Creating message to send
            var    userStateCommand = new UserStateCommand(userInfo.UserInfo, userInfo.UserState);
            var    message          = new Message(1, messageId, userStateCommand);
            string xml = messageConverter.ConvertToXml(message).ToString();

            // Finding all connected users (without this particular user)
            var collectionToSend = users.Where(ui => ui.EndPoint != null && ui != userInfo);

            // And sending user information to them
            foreach (var ui in collectionToSend)
            {
                tcpServer.SendString(ui.EndPoint, xml);
            }
        }
示例#5
0
        public void ConvertUserInfoCommandTest()
        {
            long version   = 1;
            long messageId = 123123;

            UserStateCommand command = new UserStateCommand(new UserInfo("userName"), "userState");
            Message          message = new Message(version, messageId, command);

            //Converting to xml
            DynamicXmlMessageConverter converter = new DynamicXmlMessageConverter();
            XElement xml = converter.ConvertToXml(message);

            // And back again
            Message          message2 = converter.ConvertFromXml(xml);
            UserStateCommand command2 = (UserStateCommand)message2.Command;

            Assert.That(command2.UserInfo.Name, Is.EqualTo(command.UserInfo.Name));
            Assert.That(command2.UserState, Is.EqualTo(command.UserState));
        }