Beispiel #1
0
        private void ReadCallback(IAsyncResult ar)
        {
            if (disconected)
            {
                return;
            }

            String content = String.Empty;

            StateObject state     = (StateObject)ar.AsyncState;
            int         bytesRead = 0;

            try
            {
                bytesRead = _stream.EndRead(ar);
            }catch (Exception e)
            {
                Console.WriteLine(e.Message);
                delegatesya();
                return;
            }

            if (bytesRead > 0)
            {
                state.sb.Append(Encoding.ASCII.GetString(state.buffer, 0, bytesRead));

                content = state.sb.ToString();
                if (content.IndexOf("<EOF>") > -1)
                {
                    string[] data = content.Split(new[] { "<VUP>" }, StringSplitOptions.None);
                    switch (data[0])
                    {
                    case "KICKED":
                        disconected = true;
                        delegatekick();
                        break;

                    case "MUTED":
                        _ConnectWithServerUDP.ServerMute();
                        delegatemute();
                        break;

                    case "UNMUTED":
                        _ConnectWithServerUDP.ServerUnMute();
                        delegateunmute();
                        break;

                    case "SOUNDOFF":
                        delegatesoundoff();
                        break;

                    case "SOUNDON":
                        delegatesoundon();
                        break;

                    case "CHECK":
                        sendMsg("CHECK_Y<VUP><EOF>");
                        break;

                    case "AKT_USR":
                        lock (_itemsLock) {
                            _collection.Clear();
                            for (int i = 1; i < data.Length - 1; i++)
                            {
                                if (data[i] == _MyNickAfterConnect)
                                {
                                    _collection.Add(new UserInfo(data[i], true));
                                }
                                else
                                {
                                    _collection.Add(new UserInfo(data[i]));
                                }
                            }
                        }
                        break;

                    case "CYA":
                        disconected = true;
                        delegatesya();
                        break;
                    }
                }
                else
                {
                    _stream.BeginRead(state.buffer, 0, StateObject.BufferSize, new AsyncCallback(ReadCallback), state);
                }
            }
            state.sb.Clear();
            if (!disconected)
            {
                _stream.BeginRead(state.buffer, 0, StateObject.BufferSize, new AsyncCallback(ReadCallback), state);
            }
        }