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