windows phone使用Beetle实现对象交互的TCP通讯

    Beetle提供了基于Silverlight的实现Beetle.SL,由于WP7开发也是提供了Socket的支持所以Beetle.SL是完全可以在WP7下使用。还有ProtoBuf.net同样也支持WP7,因此可以通过Beetle.SL+ProtoBuf.net就能在WP7下实现基于对象传输的TCP通讯应用。

    首先新建一个WP项目,分别引用Beetle.WP.DLL,Beetle.WP.ProtoBuf.DLL和protobuf-net.DLL;以上组件分另可以到http://beetlesl.codeplex.com/http://code.google.com/p/protobuf-net/获取得到.接下来做个简单的客户查询应用.

界面制定

windows phone使用Beetle实现对象交互的TCP通讯

主要功能是登陆后就可以进行一个客户信息查询,可以输入需要查询的客户名称。

详细代码实现

 创建一个基于ProtoBuf的Tcp连接,并在程序加载过程绑定相关事件

private Beetle.ProtoBufAdapter.ProtoBufChannel mChannel = new Beetle.ProtoBufAdapter.ProtoBufChannel();

        private void PhoneApplicationPage_Loaded(object sender, RoutedEventArgs e)

        {

            MessageAdapter.LoadMessage(GetType().Assembly);

            mChannel.Connected += OnConnected;

            mChannel.Disposed += OnDisposed;

            mChannel.Receive += OnReceive;

            mChannel.Error += OnError;

        }

通过连接按钮事件进行一个TCP连接,并在连接成功后把查询按钮变成可用.

private void cmdConnect_Click(object sender, RoutedEventArgs e)

        {

            mChannel.Connect(txtIPAddress.Text, 4520);

        }

        private void OnConnected(object sender, EventChannelArges e)

        {

           

            this.Dispatcher.BeginInvoke(() =>

            {

                cmdConnect.IsEnabled = false;

                cmdSearch.IsEnabled = true;

                txtStatus.Text = "Connected";

            });

        }

在查询按钮中进行一个查询对象查询,同时在接收事件中进行数据绑定即可。

private void cmdSearch_Click(object sender, RoutedEventArgs e)

        {

            Packages.Search search = new Packages.Search();

            search.CompanyName = txtCustomerName.Text;

            MessageAdapter.Send(mChannel, search);

        }

        private void OnReceive(object sender, EventChannelReceiveArgs e)

        {

            MessageAdapter adapter = (MessageAdapter)e.Message;

            if (adapter.Message is Packages.SearchResult)

            {

                Packages.SearchResult result = (Packages.SearchResult)adapter.Message;

                this.Dispatcher.BeginInvoke(() =>

                {

                    lstCustomers.ItemsSource = result.Customers;

                });

            }

        }

    这样一个简单的用户查询就完成了,在windows phone下使用Beetle进行TCP通讯是不是很简单的事情:)

windows phone使用Beetle实现对象交互的TCP通讯

如果你有需要可以到http://beetlesl.codeplex.com/ 获取相关代码

你可能感兴趣的:(windows phone)