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); } }
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); } }
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)); }