예제 #1
0
        //internal void RequestPeerList(bool requestOwner = false)
        //{
        //    uint regID;
        //    if (requestOwner)
        //    {
        //        regID = _b.RPC.PeersGetFriendList(RequestPeers.SetOption.OWNID);
        //        _pendingPeerRequests.Add(regID, RequestPeers.SetOption.OWNID);
        //    }
        //    else
        //    {
        //        regID = _b.RPC.PeersGetFriendList(RequestPeers.SetOption.FRIENDS);
        //        _pendingPeerRequests.Add(regID, RequestPeers.SetOption.FRIENDS);
        //    }
        //}

        //internal void ProcessResponsePeerList(uint reqID, ResponsePeerList response)
        //{
        //    RequestPeers.SetOption opt;
        //    if (_pendingPeerRequests.TryGetValue(reqID, out opt))
        //    {
        //        _pendingPeerRequests.Remove(reqID);
        //        switch (opt)
        //        {
        //            case RequestPeers.SetOption.OWNID:
        //                SetOwnID(response);
        //                break;
        //            case RequestPeers.SetOption.FRIENDS:
        //                UpdatePeerList(response);
        //                break;
        //            default:
        //                // all other cases
        //                break;
        //        }
        //    }
        //    else
        //    {
        //        // peer list - but no clue what is in it
        //    };
        //}

        internal void UpdatePeerList(ResponsePeerList msg)
        {
            // get new peerlist
            List <Person> _newPeerList = msg.peers;

            _newPeerList.Sort(new PersonComparer());

            // check if anything had changed
            if (EqualPeerLists(_peerList, _newPeerList))
            {
                return;
            }

            //save selected peer/location
            int index1 = _b.GUI.lb_friends.SelectedIndex, index2 = _b.GUI.lb_locations.SelectedIndex;

            _b.GUI.lb_friends.Items.Clear();
            ClearPeerForm();
            _peerList.Clear();

            _peerList = msg.peers;
            // i hope i don't need this anymore
            //if (_owner.locations.Count > 0)
            //    _peerList.Add(_owner);
            _peerList.Sort(new PersonComparer());

            foreach (Person p in _peerList)
            {
                byte online = 0, total = 0;
                foreach (Location l in p.locations)
                {
                    total++;
                    switch (l.state)
                    {
                    case ((uint)rsctrl.core.Location.StateFlags.CONNECTED):
                    case ((uint)rsctrl.core.Location.StateFlags.ONLINE):
                    case ((uint)(rsctrl.core.Location.StateFlags.CONNECTED | rsctrl.core.Location.StateFlags.ONLINE)):
                        online++;
                        break;

                    default:     // offline
                        break;
                    }
                }
                _b.GUI.lb_friends.Items.Add("(" + online + "/" + total + ") " + p.name);
            }

            _b.GUI.lb_friends.SelectedIndex   = index1;
            _b.GUI.lb_locations.SelectedIndex = index2;
        }
예제 #2
0
        //private void ProcessAddPeer(RSProtoBuffSSHMsg msg)
        //{
        //    Respon response = new ResponseAddPeer();
        //    Exception e;
        //    if (RSProtoBuf.Deserialize<ResponseAddPeer>(msg.ProtoBuffMsg, out response, out e))
        //        _b.GUI.tb_out.AppendText("AddPeer response: " + response.status.code + "\n");
        //    else
        //        System.Diagnostics.Debug.WriteLine("ProcessAddPeer: error deserializing " + e.Message);
        //}

        //private void ProcessModifyPeer(RSProtoBuffSSHMsg msg)
        //{
        //    ResponseModifyPeer response = new ResponseModifyPeer();
        //    Exception e;
        //    if (RSProtoBuf.Deserialize<ResponseModifyPeer>(msg.ProtoBuffMsg, out response, out e))
        //        _b.GUI.tb_out.AppendText("AddPeer response: " + response.status.code + "\n");
        //    else
        //        System.Diagnostics.Debug.WriteLine("ProcessModifyPeer: error deserializing " + e.Message);
        //}

        private void ProcessPeerList(RSProtoBuffSSHMsg msg)
        {
            ResponsePeerList response = new ResponsePeerList();
            Exception        e;

            if (RSProtoBuf.Deserialize <ResponsePeerList>(msg.ProtoBuffMsg, out response, out e))
            {
                if (response.status.code == Status.StatusCode.SUCCESS)
                {
                    //_b.PeerProcessor.ProcessResponsePeerList(msg.ReqID, response);
                    _b.PeerProcessor.UpdatePeerList(response);
                }
                else
                {
                    System.Diagnostics.Debug.WriteLine("ProcessPeerList: error deserializing " + e.Message);
                }
            }
        }