{"_id":"55290f5bceedaa0d00bc5c5b","parentDoc":null,"version":{"_id":"552829408962f339009a6790","project":"552829408962f339009a678d","__v":26,"createdAt":"2015-04-10T19:49:20.516Z","releaseDate":"2015-04-10T19:49:20.516Z","categories":["552829418962f339009a6791","55284ed68962f339009a67e1","55286c73391a362500d9b3f4","552918f6b316811900149f59","5529b255d739240d00a3483e","553287590a578a0d008d4ff5","55329385e7d1fa0d003fc946","5550b55200420e0d00d1312f","55525fca953c9c0d00f507d7","559199695631432f002d358a","559d8d96980b801700d5ec7e","55c5e833cccdeb2d004e24b9","55d76504f662951900fc0e7d","55ea213cc62aa02f008229cd","56157b750f5ed00d00483dd8","561981fbac0924170069f4e8","561b8b1ea430930d0037ea67","563417428b86331700b488ca","56cd785bface161300dae0ec","56cdcc6e70db8a15006395f4","56cdf1b749abf10b0036a34a","56cedc8ce50c9c1b00830423","56e97ba8d825061900d1ac83","570d505228e6900e00477229","573614ca2ab52e1700c8e851","57d556a2496a3117004d70cf"],"is_deprecated":false,"is_hidden":false,"is_beta":false,"is_stable":true,"codename":"","version_clean":"1.0.0","version":"1.0"},"project":"552829408962f339009a678d","user":"55282916d9e1db2d00cd923c","__v":14,"category":{"_id":"55284ed68962f339009a67e1","__v":6,"pages":["552854af60c60f230003fb96","5528553ad9e1db2d00cd9292","55286c7d391a362500d9b3f5","55290f5bceedaa0d00bc5c5b","56d1fb3d93f76e0b00bbc5e2","56d1fb6293f76e0b00bbc5e4"],"project":"552829408962f339009a678d","version":"552829408962f339009a6790","sync":{"url":"","isSync":false},"reference":false,"createdAt":"2015-04-10T22:29:42.627Z","from_sync":false,"order":9,"slug":"protocol","title":"MTProto v2"},"updates":[],"next":{"pages":[],"description":""},"createdAt":"2015-04-11T12:11:07.283Z","link_external":false,"link_url":"","githubsync":"","sync_unique":"","hidden":false,"api":{"results":{"codes":[]},"auth":"required","params":[],"url":""},"isReference":false,"order":4,"body":"Raw protocol Rpc and Push provide only basic support and work only with untyped byte arrays, but for real application we need to implement something more detailed. Basic Sync Level is created for this.\n[block:api-header]\n{\n  \"type\": \"basic\",\n  \"title\": \"RPC\"\n}\n[/block]\nBasic Sync Level contains various wrappers for Rpc Requests and Response. This objects are encoded as body in ProtoRpcRequest/ProtoRpcResponse.\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"RpcRequest {\\n    HEADER = 0x01\\n    // ID of API Method Request\\n    methodId: int\\n    // Encoded Request\\n    body: bytes\\n}\\n\\n// Successful RPC\\nRpcOk {\\n    HEADER = 0x01\\n    // ID of API Method Response\\n    methodResponseId: int\\n    // Encoded response\\n    body: bytes\\n}\\n \\n// RPC Error\\nRpcError {\\n    HEADER = 0x02\\n    // Error Code like HTTP Error code\\n    errorCode: int\\n    // Error Tag like \\\"ACCESS_DENIED\\\"\\n    errorTag: string\\n    // User visible error\\n    userMessage: string\\n    // Can user try again\\n    canTryAgain: bool\\n    // Some additional data of error\\n    errorData: bytes\\n}\\n \\n// RPC Flood Control. \\n// Client need to repeat request after delay\\nRpcFloodWait {\\n    HEADER = 0x03\\n    // Repeat delay on seconds\\n    delay: int\\n}\\n \\n// Internal Server Error\\n// Client may try to resend message\\nRpcInternalError {\\n    HEADER = 0x04\\n    canTryAgain: bool\\n    tryAgainDelay: int\\n}\",\n      \"language\": \"text\"\n    }\n  ]\n}\n[/block]\n\n[block:api-header]\n{\n  \"type\": \"basic\",\n  \"title\": \"Push\"\n}\n[/block]\nBasic Sync Level contains wrapper for Push. This objects are encoded as body in ProtoPush.\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"Push {\\n\\t// Push Entity Id\\n\\tupdateId: int\\n  // Encoded Push body\\n\\tbody: bytes\\n}\",\n      \"language\": \"text\"\n    }\n  ]\n}\n[/block]","excerpt":"Basic syncronization support","slug":"basic-sync-level","type":"basic","title":"Basic Sync Level"}

Basic Sync Level

Basic syncronization support

Raw protocol Rpc and Push provide only basic support and work only with untyped byte arrays, but for real application we need to implement something more detailed. Basic Sync Level is created for this. [block:api-header] { "type": "basic", "title": "RPC" } [/block] Basic Sync Level contains various wrappers for Rpc Requests and Response. This objects are encoded as body in ProtoRpcRequest/ProtoRpcResponse. [block:code] { "codes": [ { "code": "RpcRequest {\n HEADER = 0x01\n // ID of API Method Request\n methodId: int\n // Encoded Request\n body: bytes\n}\n\n// Successful RPC\nRpcOk {\n HEADER = 0x01\n // ID of API Method Response\n methodResponseId: int\n // Encoded response\n body: bytes\n}\n \n// RPC Error\nRpcError {\n HEADER = 0x02\n // Error Code like HTTP Error code\n errorCode: int\n // Error Tag like \"ACCESS_DENIED\"\n errorTag: string\n // User visible error\n userMessage: string\n // Can user try again\n canTryAgain: bool\n // Some additional data of error\n errorData: bytes\n}\n \n// RPC Flood Control. \n// Client need to repeat request after delay\nRpcFloodWait {\n HEADER = 0x03\n // Repeat delay on seconds\n delay: int\n}\n \n// Internal Server Error\n// Client may try to resend message\nRpcInternalError {\n HEADER = 0x04\n canTryAgain: bool\n tryAgainDelay: int\n}", "language": "text" } ] } [/block] [block:api-header] { "type": "basic", "title": "Push" } [/block] Basic Sync Level contains wrapper for Push. This objects are encoded as body in ProtoPush. [block:code] { "codes": [ { "code": "Push {\n\t// Push Entity Id\n\tupdateId: int\n // Encoded Push body\n\tbody: bytes\n}", "language": "text" } ] } [/block]