/// <summary> /// Gets the operation response. /// </summary> /// <param name="errorCode"> /// The error code. /// </param> /// <param name="debugMessage"> /// The debug message. /// </param> /// <returns> /// A new operation response. /// </returns> public OperationResponse GetOperationResponse(short errorCode, string debugMessage) { var response = new LoadWorldResponse(); return new OperationResponse(this.OperationRequest.OperationCode, response) { ReturnCode = errorCode, DebugMessage = debugMessage }; }
/// <summary> /// Expect operation <see cref="LoadWorld"/> and build Level from database, serialize it as Protobuf/JSON then send it back to client /// </summary> /// <param name="peer">The mmo peer</param> /// <param name="request">The request</param> /// <returns>Operation Response</returns> public OperationResponse OperationLoadWorld(PeerBase peer, OperationRequest request) { var operation = new LoadWorld(peer.Protocol, request); if (operation.IsValid == false) { return new OperationResponse(request.OperationCode) { ReturnCode = (int)ReturnCode.InvalidOperationParameter, DebugMessage = operation.GetErrorMessage() }; } try { string worldName = operation.PrivateRoom ? "PrivateRoom" : operation.WorldName; Level level = DbManager.Instance.GetLevel(worldName); byte[] buffer = LevelBuilder.Serialize(level); log.InfoFormat("Level {0}: Size ({1}, {2}), Tile ({3}, {4}), Entities Count: {5}, Audio: {6}", worldName, level.WorldSize[0], level.WorldSize[1], level.InterestArea[0], level.InterestArea[1], level.Entities.Count, level.Audio); var response = new LoadWorldResponse() { WorldLevel = buffer }; return new OperationResponse(request.OperationCode, response) { ReturnCode = (int)ReturnCode.Ok, DebugMessage = "OperationLoadWorld" }; } catch (Exception ex) { log.Info("LoadWorld Exception: " + ex.ToString()); return new OperationResponse(request.OperationCode) { ReturnCode = (int)ReturnCode.Fatal, DebugMessage = operation.GetErrorMessage() }; } }