/* * (C) Copyright 2015-2016 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * * Contributors: * ohun@live.cn (夜色) */ package com.mpush.common.message; import com.mpush.api.connection.Connection; import com.mpush.api.protocol.Packet; import com.mpush.common.ErrorCode; import io.netty.buffer.ByteBuf; import io.netty.channel.ChannelFutureListener; import java.util.HashMap; import java.util.Map; import static com.mpush.api.protocol.Command.ERROR; /** * Created by ohun on 2015/12/28. * * @author ohun@live.cn */ public final class ErrorMessage extends ByteBufMessage { public byte cmd; public byte code; public String reason; public String data; public ErrorMessage(byte cmd, Packet message, Connection connection) { super(message, connection); this.cmd = cmd; } public ErrorMessage(Packet message, Connection connection) { super(message, connection); } @Override public void decode(ByteBuf body) { cmd = decodeByte(body); code = decodeByte(body); reason = decodeString(body); data = decodeString(body); } @Override public void encode(ByteBuf body) { encodeByte(body, cmd); encodeByte(body, code); encodeString(body, reason); encodeString(body, data); } @Override protected Map<String, Object> encodeJsonBody() { Map<String, Object> body = new HashMap<>(4); if (cmd > 0) body.put("cmd", cmd); if (code > 0) body.put("code", code); if (reason != null) body.put("reason", reason); if (data != null) body.put("data", data); return body; } public static ErrorMessage from(BaseMessage src) { return new ErrorMessage(src.packet.cmd, src.packet.response(ERROR), src.connection); } public static ErrorMessage from(Packet src, Connection connection) { return new ErrorMessage(src.cmd, src.response(ERROR), connection); } public ErrorMessage setReason(String reason) { this.reason = reason; return this; } public ErrorMessage setData(String data) { this.data = data; return this; } public ErrorMessage setErrorCode(ErrorCode code) { this.code = code.errorCode; this.reason = code.errorMsg; return this; } @Override public void send() { super.sendRaw(); } @Override public void close() { sendRaw(ChannelFutureListener.CLOSE); } @Override public String toString() { return "ErrorMessage{" + "reason='" + reason + '\'' + ", code=" + code + ", packet=" + packet + '}'; } }