예제 #1
0
        public async Task <string> WelcomeFromReceiver(Stream stream)
        {
            try {
                stream = new PXExceptionsFilterStream(stream);

                var reader = new PXBinaryReaderAsync(stream);
                var writer = new PXBinaryWriterAsync(stream);

                if (await reader.ReadInt16() == PLLP_VERSION)
                {
                    writer.Write(PLLP_SIGNAL_VERSION_OK);
                    await writer.FlushAsync();
                }
                else
                {
                    writer.Write(PLLP_SIGNAL_INCORRECT_VERSION);
                    await writer.FlushAsync();

                    throw new PLLPVersionIncorrectException();
                }

                Guid id;

                if (await reader.ReadBool())
                {
                    id = (await reader.ReadGuid());
                }
                else
                {
                    id = Guid.NewGuid();
                    writer.Write(id);
                    await writer.FlushAsync();
                }

                return(id.ToString());
            } catch (PLLPVersionIncorrectException) {
                throw;
            } catch (PXConnectionClosedRemoteException) {
                throw;
            } catch (Exception e) {
                throw new PLLPUknownException(e);
            }
        }
예제 #2
0
        public async Task <string> WelcomeFromSender(Stream stream, string reconnectingClientId)
        {
            try {
                stream = new PXExceptionsFilterStream(stream);

                var reader = new PXBinaryReaderAsync(stream);
                var writer = new PXBinaryWriterAsync(stream);

                writer.Write(PLLP_VERSION);
                await writer.FlushAsync();

                if (await reader.ReadInt16() != PLLP_SIGNAL_VERSION_OK)
                {
                    throw new PLLPVersionIncorrectException();
                }

                if (reconnectingClientId != null)
                {
                    writer.Write(true);
                    writer.Write(Guid.Parse(reconnectingClientId));
                    await writer.FlushAsync();

                    return(reconnectingClientId);
                }
                else
                {
                    writer.Write(false);
                    await writer.FlushAsync();

                    return((await reader.ReadGuid()).ToString());
                }
            } catch (PLLPVersionIncorrectException) {
                throw;
            } catch (PXConnectionClosedRemoteException) {
                throw;
            } catch (Exception e) {
                throw new PLLPUknownException(e);
            }
        }