public Message(long version, long id, Command command) { Contract.Requires(command != null); Version = version; Id = id; Command = command; }
private Message CreateMessage(Command command) { Contract.Requires(command != null); Contract.Ensures(Contract.Result<Message>() != null); var message = new Message(1, messageId, command); Interlocked.Increment(ref messageId); return message; }
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); } }