protected override DuplexMessage DoExecute(DuplexMessage commandMessage) { DuplexMessage resultMessage = null; var school = metaRepository .GetAllSchools() .ByIdentifier(commandMessage.Header.Identifier); if (school != null) { if (UpdateRegisterInfo(school, commandMessage)) { resultMessage = DuplexMessage.CreateAckMessage(commandMessage); } else { resultMessage = DuplexMessage.CreateCallbackMessage(commandMessage, ErrorCode.RegisterFailed); } } else { resultMessage = DuplexMessage.CreateCallbackMessage(commandMessage, ErrorCode.RegisterFailed); } return(resultMessage); }
protected override DuplexMessage DoExecute(DuplexMessage commandMessage) { return(DuplexMessage.CreateAckMessage(commandMessage, commandMessage.Header.ErrorCode == ErrorCode.NoError ? ErrorCode.BadRequest : commandMessage.Header.ErrorCode)); }
public override DuplexMessage Run(int timeout = AbstractAsyncCommand.BLOCK_UNTIL_TIMEOUT_AFTER_SECONDS * 1000) { DisableRetry(); RunAsync(); if (!semaphore.Wait(timeout)) { result = DuplexMessage.CreateAckMessage(ID, Version, CommandCode, ErrorCode.CommandRunTimeout); semaphore.Dispose(); } return(result); }
protected override DuplexMessage DoExecute(DuplexMessage commandMessage) { var instruction = BuildInstruction(commandMessage); if (instruction != null) { instructionProducer.Produce(instruction); return(DuplexMessage.CreateAckMessage(commandMessage)); } else { return(DuplexMessage.CreateAckMessage(commandMessage, ErrorCode.InstructionBuildFailed)); } }
public override void MessageReceived(INextFilter nextFilter, IoSession session, object message) { using (var scope = ObjectHost.Host.BeginLifetimeScope()) { var commandMessage = message as DuplexMessage; if (commandMessage != null) { if (commandMessage.Header.CommandCode == CommandCode.Authentication) { var school = metaRepository .GetAllSchools() .ByIdentifier(commandMessage.Header.Identifier); if (school != null && school.UniqueToken.Equals( commandMessage.GetContent <AuthInfo>().Mac, StringComparison.OrdinalIgnoreCase)) { session.SetAttributeIfAbsent(KeyName.SESSION_IDENTIFIER, commandMessage.Header.Identifier); identifierManager.SetSessonIdentifier(commandMessage.Header.Identifier, session); nextFilter.FilterWrite(session, new DefaultWriteRequest( DuplexMessage.CreateCallbackMessage(commandMessage))); } else { nextFilter.FilterWrite(session, new DefaultWriteRequest( DuplexMessage.CreateAckMessage(commandMessage, ErrorCode.AuthenticationFailed))); } } else if ( commandMessage.Header.CommandCode == CommandCode.Register || commandMessage.Header.CommandCode == CommandCode.Heartbeat) { nextFilter.MessageReceived(session, message); } else { if (!session.ContainsAttribute(KeyName.SESSION_IDENTIFIER)) { nextFilter.FilterWrite(session, new DefaultWriteRequest( DuplexMessage.CreateAckMessage(commandMessage, ErrorCode.UnauthorizedCommand))); } else { var identifier = session.GetAttribute <string>(KeyName.SESSION_IDENTIFIER); if (identifier.Equals(commandMessage.Header.Identifier)) { nextFilter.MessageReceived(session, message); } else { nextFilter.FilterWrite(session, new DefaultWriteRequest( DuplexMessage.CreateAckMessage(commandMessage, ErrorCode.UnauthorizedCommand))); } } } } else { nextFilter.FilterWrite(session, new DefaultWriteRequest( DuplexMessage.CreateAckMessage( Guid.NewGuid().ToByteArray().ToBase64(), MessageVersion.V1, CommandCode.UnAssigned, ErrorCode.IllegalCommandRequest))); } } }