Exemple #1
0
        void OnResolveCompletion(PPError result)
        {
            if (result != PPError.Ok)
            {
                PostMessage("Resolve failed.");
                return;
            }

            var addr = PPBHostResolver.GetNetAddress(resolver_, 0);

            PostMessage($"Resolved: {(Var)PPBNetAddress.DescribeAsString(addr, PPBool.True)}");

            var callback = new CompletionCallback(OnConnectCompletion);

            if (IsUDP)
            {
                PostMessage("Binding ...");
                remote_host_ = new PPResource(addr);
                var ipv4_addr = new PPNetAddressIPv4(0);
                PPBUDPSocket.Bind(udp_socket_, addr, callback);
            }
            else
            {
                PostMessage("Connecting ...");
                PPBTCPSocket.Connect(tcp_socket_, addr, callback);
            }
        }
Exemple #2
0
        void Connect(string host, bool tcp)
        {
            if (IsConnected)
            {
                PostMessage("Already connected.");
                return;
            }

            if (tcp)
            {
                tcp_socket_ = PPBTCPSocket.Create(this);
                if (PPBTCPSocket.IsTCPSocket(tcp_socket_) == PPBool.False)
                {
                    PostMessage("Error creating TCPSocket.");
                    return;
                }
            }
            else
            {
                udp_socket_ = PPBUDPSocket.Create(this);
                if (PPBUDPSocket.IsUDPSocket(udp_socket_) == PPBool.False)
                {
                    PostMessage("Error creating UDPSocket.");
                    return;
                }
            }


            resolver_ = PPBHostResolver.Create(this);
            if (PPBHostResolver.IsHostResolver(resolver_) == PPBool.False)
            {
                PostMessage("Error creating HostResolver.");
                return;
            }

            ushort port     = 80;
            var    hostname = host;
            int    pos      = host.IndexOf(':');

            if (pos > 0)
            {
                hostname = host.Substring(0, pos);
                port     = ushort.Parse(host.Substring(pos + 1));
            }

            var hint = new PPHostResolverHint()
            {
                family = PPNetAddressFamily.Unspecified, flags = 0
            };

            PPBHostResolver.Resolve(resolver_,
                                    hostname,
                                    port,
                                    hint,
                                    new CompletionCallback(OnResolveCompletion));

            PostMessage("Resolving ...");
        }
Exemple #3
0
        void Send(string message)
        {
            if (!IsConnected)
            {
                PostMessage("Not connected.");
                return;
            }

            if (send_outstanding_)
            {
                PostMessage("Already sending.");
                return;
            }


            var data     = Encoding.UTF8.GetBytes(message);
            var size     = data.Length;
            var callback = new CompletionCallback(OnSendCompletion);
            int result   = 0;

            if (IsUDP)
            {
                result = PPBUDPSocket.SendTo(udp_socket_, data, size, remote_host_, callback);
            }
            else
            {
                result = PPBTCPSocket.Write(tcp_socket_, data, size, callback);
            }
            string status = string.Empty;

            if (result < 0)
            {
                if ((PPError)result == PPError.OkCompletionpending)
                {
                    status = $"Sending bytes: {size}";
                    PostMessage(status);
                    send_outstanding_ = true;
                }
                else
                {
                    status = $"Send returned error: {result}";
                    PostMessage(status);
                }
            }
            else
            {
                status = $"Sent bytes synchronously: {result}";
                PostMessage(status);
            }
        }
Exemple #4
0
 void Receive()
 {
     if (IsUDP)
     {
         Array.Clear(receive_buffer_, 0, receive_buffer_.Length);
         var OnReceiveFromCompletionCallback = new CompletionCallbackWithOutput <PPResource>(OnReceiveFromCompletion);
         PPBUDPSocket.RecvFrom(udp_socket_, receive_buffer_, kBufferSize, out OnReceiveFromCompletionCallback.OutputAdapter.output, OnReceiveFromCompletionCallback);
     }
     else
     {
         Array.Clear(receive_buffer_, 0, receive_buffer_.Length);
         PPBTCPSocket.Read(tcp_socket_, receive_buffer_, kBufferSize, new CompletionCallback(OnReceiveCompletion));
     }
 }
Exemple #5
0
        void Close()
        {
            if (!IsConnected)
            {
                PostMessage("Not connected.");
                return;
            }

            if (tcp_socket_.IsEmpty)
            {
                PPBUDPSocket.Close(udp_socket_);
                udp_socket_.Dispose();
            }
            else
            {
                PPBTCPSocket.Close(tcp_socket_);
                tcp_socket_.Dispose();
            }

            PostMessage("Closed connection.");
        }
Exemple #6
0
        private void OnConnectCompletion(PPError result)
        {
            if (result != PPError.Ok)
            {
                var status = $"Connection failed: {result}";
                PostMessage(status);
                return;
            }

            if (IsUDP)
            {
                var addr = PPBUDPSocket.GetBoundAddress(udp_socket_);
                PostMessage($"Bound to: {((Var)PPBNetAddress.DescribeAsString(addr, PPBool.True)).AsString()}");
            }
            else
            {
                PostMessage("Connected");
            }

            Receive();
        }