import * as $protobuf from "protobufjs";
import Long = require("long");
/** ChatType enum. */
export enum ChatType {
    CT_Unknown = 0,
    CT_Private = 1,
    CT_World = 2,
    CT_Marquee = 3
}

/** Represents a ReqChat. */
export class ReqChat implements IReqChat {

    /**
     * Constructs a new ReqChat.
     * @param [properties] Properties to set
     */
    constructor(properties?: IReqChat);

    /** ReqChat srcUser. */
    public srcUser?: (IChatUser|null);

    /** ReqChat dstUser. */
    public dstUser?: (IChatUser|null);

    /** ReqChat type. */
    public type: ChatType;

    /** ReqChat gameId. */
    public gameId: ServiceTypeId;

    /** ReqChat content. */
    public content: string;

    /**
     * Creates a new ReqChat instance using the specified properties.
     * @param [properties] Properties to set
     * @returns ReqChat instance
     */
    public static create(properties?: IReqChat): ReqChat;

    /**
     * Encodes the specified ReqChat message. Does not implicitly {@link ReqChat.verify|verify} messages.
     * @param message ReqChat message or plain object to encode
     * @param [writer] Writer to encode to
     * @returns Writer
     */
    public static encode(message: IReqChat, writer?: $protobuf.Writer): $protobuf.Writer;

    /**
     * Encodes the specified ReqChat message, length delimited. Does not implicitly {@link ReqChat.verify|verify} messages.
     * @param message ReqChat message or plain object to encode
     * @param [writer] Writer to encode to
     * @returns Writer
     */
    public static encodeDelimited(message: IReqChat, writer?: $protobuf.Writer): $protobuf.Writer;

    /**
     * Decodes a ReqChat message from the specified reader or buffer.
     * @param reader Reader or buffer to decode from
     * @param [length] Message length if known beforehand
     * @returns ReqChat
     * @throws {Error} If the payload is not a reader or valid buffer
     * @throws {$protobuf.util.ProtocolError} If required fields are missing
     */
    public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): ReqChat;

    /**
     * Decodes a ReqChat message from the specified reader or buffer, length delimited.
     * @param reader Reader or buffer to decode from
     * @returns ReqChat
     * @throws {Error} If the payload is not a reader or valid buffer
     * @throws {$protobuf.util.ProtocolError} If required fields are missing
     */
    public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): ReqChat;

    /**
     * Verifies a ReqChat message.
     * @param message Plain object to verify
     * @returns `null` if valid, otherwise the reason why it is not
     */
    public static verify(message: { [k: string]: any }): (string|null);

    /**
     * Creates a ReqChat message from a plain object. Also converts values to their respective internal types.
     * @param object Plain object
     * @returns ReqChat
     */
    public static fromObject(object: { [k: string]: any }): ReqChat;

    /**
     * Creates a plain object from a ReqChat message. Also converts values to other types if specified.
     * @param message ReqChat
     * @param [options] Conversion options
     * @returns Plain object
     */
    public static toObject(message: ReqChat, options?: $protobuf.IConversionOptions): { [k: string]: any };

    /**
     * Converts this ReqChat to JSON.
     * @returns JSON object
     */
    public toJSON(): { [k: string]: any };

    /**
     * Gets the default type url for ReqChat
     * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
     * @returns The default type url
     */
    public static getTypeUrl(typeUrlPrefix?: string): string;
}

/** Represents a ChatUser. */
export class ChatUser implements IChatUser {

    /**
     * Constructs a new ChatUser.
     * @param [properties] Properties to set
     */
    constructor(properties?: IChatUser);

    /** ChatUser userId. */
    public userId: Long;

    /** ChatUser nickname. */
    public nickname: string;

    /** ChatUser avatar. */
    public avatar: string;

    /** ChatUser avatarFrame. */
    public avatarFrame: string;

    /** ChatUser vipLevel. */
    public vipLevel: string;

    /**
     * Creates a new ChatUser instance using the specified properties.
     * @param [properties] Properties to set
     * @returns ChatUser instance
     */
    public static create(properties?: IChatUser): ChatUser;

    /**
     * Encodes the specified ChatUser message. Does not implicitly {@link ChatUser.verify|verify} messages.
     * @param message ChatUser message or plain object to encode
     * @param [writer] Writer to encode to
     * @returns Writer
     */
    public static encode(message: IChatUser, writer?: $protobuf.Writer): $protobuf.Writer;

    /**
     * Encodes the specified ChatUser message, length delimited. Does not implicitly {@link ChatUser.verify|verify} messages.
     * @param message ChatUser message or plain object to encode
     * @param [writer] Writer to encode to
     * @returns Writer
     */
    public static encodeDelimited(message: IChatUser, writer?: $protobuf.Writer): $protobuf.Writer;

    /**
     * Decodes a ChatUser message from the specified reader or buffer.
     * @param reader Reader or buffer to decode from
     * @param [length] Message length if known beforehand
     * @returns ChatUser
     * @throws {Error} If the payload is not a reader or valid buffer
     * @throws {$protobuf.util.ProtocolError} If required fields are missing
     */
    public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): ChatUser;

    /**
     * Decodes a ChatUser message from the specified reader or buffer, length delimited.
     * @param reader Reader or buffer to decode from
     * @returns ChatUser
     * @throws {Error} If the payload is not a reader or valid buffer
     * @throws {$protobuf.util.ProtocolError} If required fields are missing
     */
    public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): ChatUser;

    /**
     * Verifies a ChatUser message.
     * @param message Plain object to verify
     * @returns `null` if valid, otherwise the reason why it is not
     */
    public static verify(message: { [k: string]: any }): (string|null);

    /**
     * Creates a ChatUser message from a plain object. Also converts values to their respective internal types.
     * @param object Plain object
     * @returns ChatUser
     */
    public static fromObject(object: { [k: string]: any }): ChatUser;

    /**
     * Creates a plain object from a ChatUser message. Also converts values to other types if specified.
     * @param message ChatUser
     * @param [options] Conversion options
     * @returns Plain object
     */
    public static toObject(message: ChatUser, options?: $protobuf.IConversionOptions): { [k: string]: any };

    /**
     * Converts this ChatUser to JSON.
     * @returns JSON object
     */
    public toJSON(): { [k: string]: any };

    /**
     * Gets the default type url for ChatUser
     * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
     * @returns The default type url
     */
    public static getTypeUrl(typeUrlPrefix?: string): string;
}

/** Represents a GameUser. */
export class GameUser implements IGameUser {

    /**
     * Constructs a new GameUser.
     * @param [properties] Properties to set
     */
    constructor(properties?: IGameUser);

    /** GameUser userId. */
    public userId: Long;

    /** GameUser nickname. */
    public nickname: string;

    /** GameUser avatar. */
    public avatar: string;

    /** GameUser avatarFrame. */
    public avatarFrame: string;

    /** GameUser vipLevel. */
    public vipLevel: number;

    /** GameUser vipExp. */
    public vipExp: number;

    /** GameUser seat. */
    public seat: Long;

    /** GameUser gold. */
    public gold: Long;

    /**
     * Creates a new GameUser instance using the specified properties.
     * @param [properties] Properties to set
     * @returns GameUser instance
     */
    public static create(properties?: IGameUser): GameUser;

    /**
     * Encodes the specified GameUser message. Does not implicitly {@link GameUser.verify|verify} messages.
     * @param message GameUser message or plain object to encode
     * @param [writer] Writer to encode to
     * @returns Writer
     */
    public static encode(message: IGameUser, writer?: $protobuf.Writer): $protobuf.Writer;

    /**
     * Encodes the specified GameUser message, length delimited. Does not implicitly {@link GameUser.verify|verify} messages.
     * @param message GameUser message or plain object to encode
     * @param [writer] Writer to encode to
     * @returns Writer
     */
    public static encodeDelimited(message: IGameUser, writer?: $protobuf.Writer): $protobuf.Writer;

    /**
     * Decodes a GameUser message from the specified reader or buffer.
     * @param reader Reader or buffer to decode from
     * @param [length] Message length if known beforehand
     * @returns GameUser
     * @throws {Error} If the payload is not a reader or valid buffer
     * @throws {$protobuf.util.ProtocolError} If required fields are missing
     */
    public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): GameUser;

    /**
     * Decodes a GameUser message from the specified reader or buffer, length delimited.
     * @param reader Reader or buffer to decode from
     * @returns GameUser
     * @throws {Error} If the payload is not a reader or valid buffer
     * @throws {$protobuf.util.ProtocolError} If required fields are missing
     */
    public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): GameUser;

    /**
     * Verifies a GameUser message.
     * @param message Plain object to verify
     * @returns `null` if valid, otherwise the reason why it is not
     */
    public static verify(message: { [k: string]: any }): (string|null);

    /**
     * Creates a GameUser message from a plain object. Also converts values to their respective internal types.
     * @param object Plain object
     * @returns GameUser
     */
    public static fromObject(object: { [k: string]: any }): GameUser;

    /**
     * Creates a plain object from a GameUser message. Also converts values to other types if specified.
     * @param message GameUser
     * @param [options] Conversion options
     * @returns Plain object
     */
    public static toObject(message: GameUser, options?: $protobuf.IConversionOptions): { [k: string]: any };

    /**
     * Converts this GameUser to JSON.
     * @returns JSON object
     */
    public toJSON(): { [k: string]: any };

    /**
     * Gets the default type url for GameUser
     * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
     * @returns The default type url
     */
    public static getTypeUrl(typeUrlPrefix?: string): string;
}

/** ServiceTypeId enum. */
export enum ServiceTypeId {
    STI_Unknown = 0,
    STI_Login = 10000,
    STI_Chat = 10005,
    STI_Match = 10010,
    STI_Lobby = 10015,
    STI_Admin = 10020,
    STI_Gate = 20000,
    STI_ColorGame = 20005,
    STI_DB = 30000
}
