/*
XOWA: the XOWA Offline Wiki Application
Copyright (C) 2012-2017 gnosygnu@gmail.com

XOWA is licensed under the terms of the General Public License (GPL) Version 3,
or alternatively under the terms of the Apache License Version 2.0.

You may use XOWA according to either of these licenses as is most appropriate
for your project on a case-by-case basis.

The terms of each license can be found in the source code repository:

GPLv3 License: https://github.com/gnosygnu/xowa/blob/master/LICENSE-GPLv3.txt
Apache License: https://github.com/gnosygnu/xowa/blob/master/LICENSE-APACHE2.txt
*/
package gplx.xowa.apps.servers.tcp; import gplx.*; import gplx.xowa.*; import gplx.xowa.apps.*; import gplx.xowa.apps.servers.*;
public class Xosrv_msg {
	public byte Version_tid() {return Version_tid_0;} static final byte Version_tid_0 = 0;
	public byte[] Cmd_name() {return cmd_name;} private byte[] cmd_name;
	public byte[] Msg_id() {return msg_id;} private byte[] msg_id;
	public byte[] Sender() {return sender;} private byte[] sender;
	public byte[] Recipient() {return recipient;} private byte[] recipient;
	public byte[] Msg_date() {return msg_date;} private byte[] msg_date;
	public byte[] Msg_text() {return msg_text;} private byte[] msg_text;
	public void Print(Bry_bfr bfr) {
		int body_len = cmd_name.length + msg_id.length + sender.length + recipient.length + msg_date.length + msg_text.length + 5;	// 5=5 pipes for 6 fields
		int cksum = (body_len * 2) + 1; 
		bfr.Add_int_fixed(this.Version_tid()	,  1).Add_byte_pipe();		// 0|
		bfr.Add_int_fixed(body_len				, 10).Add_byte_pipe();		// 0123456789|
		bfr.Add_int_fixed(cksum					, 10).Add_byte_pipe();		// 0123456789|
		bfr.Add(cmd_name							).Add_byte_pipe();		// cmd|
		bfr.Add(msg_id								).Add_byte_pipe();		// id|
		bfr.Add(sender								).Add_byte_pipe();		// sender|
		bfr.Add(recipient							).Add_byte_pipe();		// recipient|
		bfr.Add(msg_date							).Add_byte_pipe();		// msg_date|
		bfr.Add(msg_text							);						// msg_text
	}
	public static final Xosrv_msg Exit = new Xosrv_msg();
	public static Xosrv_msg fail_(String fmt, Object... ary) {
		Xosrv_msg rv = new Xosrv_msg();
		rv.msg_text = Bry_.new_u8(String_.Format(fmt, ary));
		return rv;
	}
	public static Xosrv_msg new_(byte[] cmd_name, byte[] msg_id, byte[] sender, byte[] recipient, byte[] msg_date, byte[] msg_text) {
		Xosrv_msg rv = new Xosrv_msg();
		rv.cmd_name = cmd_name;
		rv.msg_id = msg_id;
		rv.sender = sender;
		rv.recipient = recipient;
		rv.msg_date = msg_date;
		rv.msg_text = msg_text;
		return rv;
	}
}
/*
Message definition
  Id            : 0
  Purpose       : Version number for message format
  Data type     : int
  Notes         : Always 0; will change to 1 if message format ever changes
  Example       : "0"

  Id            : 1
  Description   : Body length; specified total length of message field 3 (body)
  Data type     : int
  Notes         : always zero-padded to 10 bytes (not hexadecimal) 
  Example       : "0000000123"

  Id            : 2
  Description   : Checksum; should equal (2 * body length) + 1
  Data type     : int
  Notes         : always zero-padded to 10 bytes (not hexadecimal) 
  Example       : "0000000247"

  Id            : 3
  Description   : Body
  Data type     : String
  Notes         : length specified by field 1 (body length)
  Example       : see below

Body definition
  * Pipes are not allowed in any field except for the last
  * Only the first field is required

  Id            : 0
  Purpose       : Command name
  Data type     : String
  Notes         : unique name identifying the command
  Example       : "xowa.cmd.exec", "xowa.cmd.result", "xowa.cmd.error", "xowa.js.exec", "xowa.js.result", "xowa.js.error"

  Id            : 1
  Purpose       : Message id
  Data type     : String
  Notes         : Usage is defined by callers; can be empty
  Example       : "1", ""

  Id            : 2
  Purpose       : Sender id
  Data type     : String
  Notes         : Usage is defined by callers; can be empty
  Example       : "tab1", "xowa", ""

  Id            : 3
  Purpose       : Recipient id
  Data type     : String
  Notes         : Usage is defined by callers; can be empty
  Example       : "xowa", "tab1", ""

  Id            : 4
  Purpose       : Message date
  Data type     : String
  Notes         : ISO 8601 format; see http://www.w3.org/TR/NOTE-datetime; Usage is defined by callers; can be empty
  Example       : "1997-07-16T19:20:30.45+01:00", ""

  Id            : 5
  Purpose       : Message text
  Data type     : String
  Notes         : freeform; can contain any character
  Example       : "app.shell.fetch_page('simple.wikipedia.org/wiki/Earth', 'html');"*/
