public Task <JObject> TransportAsync(SyncEndpoint endpoint, JObject contents)
        {
            switch (endpoint)
            {
            case SyncEndpoint.BeginSession:
                return(Task.FromResult(_serverSession.BeginSession(contents)));

            case SyncEndpoint.EndSession:
                return(Task.FromResult(_serverSession.EndSession(contents)));

            case SyncEndpoint.GetChanges:
                return(Task.FromResult(_serverSession.GetChanges(contents)));

            case SyncEndpoint.GetItemData:
                return(Task.FromResult(_serverSession.GetItemData(contents)));

            case SyncEndpoint.GetItemDataBatch:
                return(Task.FromResult(_serverSession.GetItemDataBatch(contents)));

            case SyncEndpoint.PutChanges:
                return(Task.FromResult(_serverSession.PutChanges(contents)));

            case SyncEndpoint.PutItemDataBatch:
                return(Task.FromResult(_serverSession.PutItemDataBatch(contents)));

            case SyncEndpoint.ApplyChanges:
                return(Task.FromResult(_serverSession.ApplyChanges(contents)));

            default:
                throw new Exception("Unknown endpoint");
            }
        }
Ejemplo n.º 2
0
        public MatrixApi(Uri url)
        {
            if (url != null && url.IsWellFormedOriginalString() && !url.IsAbsoluteUri)
            {
                throw new MatrixException(Resources.InvalidUrl);
            }

            _isAppservice = false;
            Backend       = new HttpBackend(url, UserId);
            BaseUrl       = url;
            Rng           = new Random(DateTime.Now.Millisecond);

            Room             = new RoomApi(this);
            LoginEndpoint    = new LoginEndpoint(this);
            VersionsEndpoint = new VersionsEndpoint(this);
            Device           = new DeviceApi(this);
            Media            = new MediaApi(this);
            Profile          = new ProfileApi(this);
            Sync             = new SyncEndpoint(this);
            RoomDirectory    = new RoomDirectoryApi(this);
        }
Ejemplo n.º 3
0
        public async Task <JObject> TransportAsync(SyncEndpoint endpoint, JObject contents)
        {
            var request = new JObject(contents);

            AddCredentials(request);
            var content           = new StringContent(request.ToString(), Encoding.UTF8, "application/json");
            var compressedContent = new CompressedContent(content, "gzip");

            Uri remoteEndpoint;

            switch (endpoint)
            {
            case SyncEndpoint.BeginSession:
                remoteEndpoint = new Uri(_remoteAddress, "beginSession");
                break;

            case SyncEndpoint.EndSession:
                remoteEndpoint = new Uri(_remoteAddress, "endSession");
                break;

            case SyncEndpoint.GetChanges:
                remoteEndpoint = new Uri(_remoteAddress, "getChanges");
                break;

            case SyncEndpoint.GetItemData:
                remoteEndpoint = new Uri(_remoteAddress, "getItemData");
                break;

            case SyncEndpoint.GetItemDataBatch:
                remoteEndpoint = new Uri(_remoteAddress, "getItemDataBatch");
                break;

            case SyncEndpoint.PutChanges:
                remoteEndpoint = new Uri(_remoteAddress, "putChanges");
                break;

            case SyncEndpoint.PutItemDataBatch:
                remoteEndpoint = new Uri(_remoteAddress, "putItemDataBatch");
                break;

            case SyncEndpoint.ApplyChanges:
                remoteEndpoint = new Uri(_remoteAddress, "applyChanges");
                break;

            default:
                throw new Exception("Unknown endpoint");
            }

            var responseMessage = await Client.PostAsync(remoteEndpoint, compressedContent);

            var responseString = await responseMessage.Content.ReadAsStringAsync();

            if (!responseMessage.IsSuccessStatusCode)
            {
                throw new Exception(String.Format("Remote call failed (HTTP Status Code {0}): {1}", responseMessage.StatusCode, responseString));
            }

            var response = JObject.Parse(responseString);

            if (response["ErrorCode"] != null)
            {
                throw new Exception(String.Format("Remote call failed with error code {0} - {1}", response["ErrorCode"], response["ErrorMessage"]));
            }

            return(response);
        }