Example #1
0
        /// <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 };
        }
Example #2
0
        /// <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() };
            }
        }