示例#1
0
    public void Matching()
    {
        //没有匹配到就继续匹配

        while (!isMatched)
        {
            lock (LocObj)
            {
                CTUser man      = mPool[GlobalVar.SEX_MALE].MatchUser();
                CTUser stranger = mPool[GlobalVar.SEX_FEMALE].MatchUser();
                if (stranger != null && stranger != null)
                {
                    string id = System.Guid.NewGuid().ToString();
                    man.Chatid      = id;
                    stranger.Chatid = id;
                    moveUser(GlobalVar.STATE_BUSY, man.Uid);
                    moveUser(GlobalVar.STATE_BUSY, stranger.Uid);
                    //推送给用户匹配成功通知
                    List <CTUser> listuser = new List <CTUser>();
                    listuser.Add(man);
                    listuser.Add(stranger);
                    mChattingRoom.Add(id, listuser);
                    //推送信息包括:State:success,Stranger:uid
                    CTPushMsg.Send(man.ConnectionId, "匹配成功了铁子");
                    CTPushMsg.Send(stranger.ConnectionId, "匹配成功了铁子");
                }
            }
            if (mPool[GlobalVar.SEX_MALE].isPendingEmpty() || mPool[GlobalVar.SEX_FEMALE].isPendingEmpty())
            {
                Thread.Sleep(3000);
            }
            Thread.Sleep(2000);
        }
    }
示例#2
0
    //状态切换
    public CTUser MoveUser(Dictionary <string, CTUser> tmpList, int to, string uid)
    {
        CTUser tmpUser = null;

        lock (LocObj)
        {
            //先寻找后添加再移除
            if (tmpList != null && tmpList.Count > 0)
            {
                tmpUser = tmpList[uid];
                if (tmpUser == null)
                {
                    return(null);
                }
                switch (to)
                {
                case GlobalVar.STATE_NONE:
                    if (mList.ContainsKey(uid))
                    {
                        if (!tmpUser.Chatid.Equals(""))
                        {
                            tmpUser.Chatid = "";
                        }
                        mList.Add(tmpUser.Uid, tmpUser);
                        tmpUser.State = GlobalVar.STATE_NONE + "";
                    }
                    break;

                case GlobalVar.STATE_PENDING:
                    if (mList.ContainsKey(uid))
                    {
                        if (!tmpUser.Chatid.Equals(""))
                        {
                            tmpUser.Chatid = "";
                        }
                        mPending.Add(tmpUser.Uid, tmpUser);
                        tmpUser.State = GlobalVar.STATE_PENDING + "";
                    }
                    break;

                case GlobalVar.STATE_BUSY:
                    if (mList.ContainsKey(uid) && !tmpUser.Chatid.Equals(""))
                    {
                        mBusy.Add(tmpUser.Uid, tmpUser);
                        tmpUser.State = GlobalVar.STATE_BUSY + "";
                    }
                    break;
                }
                tmpList.Remove(uid);
            }
            else
            {
                return(null);;
            }
        }
        return(tmpUser);
    }
示例#3
0
 //登录操作
 public void AddUser(CTUser user)
 {
     lock (LocObj)
     {
         if (mList != null && !mList.ContainsKey(user.Uid))
         {
             mList.Add(user.Uid, user);
         }
     }
 }
示例#4
0
    public void addUser(CTUser user)
    {
        if (user.Sex.Equals(""))
        {
            return;
        }

        TempPool tp = mPool[user.Sex];

        tp.AddUser(user);
    }
示例#5
0
    protected override Task OnReceived(IRequest request, string connectionId, string data)
    {
        /***********************2017-09-08  邵国鑫***/
        //1.转发消息到对应id
        //2.连接信息 添加新用户

        try
        {
            CTData <Object> d = new CTData <Object>();
            d = JsonConvert.DeserializeObject <CTData <Object> >(data);
            //初始json
            if (d != null)
            {
                switch (d.DataType)
                {
                case CTData <Object> .DATATYPE_CONNECTED:
                    CTData <CTUser> s    = JsonConvert.DeserializeObject <CTData <CTUser> >(data);
                    CTUser          user = s.Body;
                    CTAreaPool.getInstance().addUser(user);
                    CTUserBase userbase = new CTUserBase();
                    userbase.Sex    = user.Sex;
                    userbase.Uid    = user.Uid;
                    userbase.School = user.School;
                    if (!mClients.ContainsKey(connectionId))
                    {
                        mClients.Add(connectionId, userbase);
                    }
                    if (!mFastClients.ContainsKey(user.Uid))
                    {
                        mFastClients.Add(user.Uid, connectionId);
                    }
                    break;

                case CTData <Object> .DATATYPE_MESSAGE:
                    CTData <CTMessage> ctmsg = JsonConvert.DeserializeObject <CTData <CTMessage> >(data);
                    //文本信息
                    CTMessage msg = ctmsg.Body;
                    if (mFastClients.Count > 0 && mFastClients.ContainsKey(msg.To))
                    {
                        Connection.Send(mFastClients[msg.To], ctmsg.Body.Body);
                    }
                    break;
                }
            }
        }
        catch (Exception e)
        {
            string x = e.Message;
        }

        return(base.OnReceived(request, connectionId, data));
    }
示例#6
0
    public void addUser(CTUser user)
    {
        if (user.Sex.Equals(""))
        {
            return;
        }
        if (user.Sex != GlobalVar.SEX_MALE && user.Sex != GlobalVar.SEX_FEMALE)
        {
            return;
        }
        TempPool tp = mPool[user.Sex];

        tp.AddUser(user);
    }
示例#7
0
 //新用户加入
 public void addUser(CTUser user)
 {
     if (user == null || user.School == null || user.School.SCode.Equals(""))
     {
         return;
     }
     if (mPool.ContainsKey(user.School.SCode))
     {
         mPool[user.School.SCode].addUser(user);
     }
     else
     {
         ctUserPool tmpUserPool = new ctUserPool();
         tmpUserPool.addUser(user);
         mPool.Add(user.School.SCode, tmpUserPool);
     }
 }
示例#8
0
    public void Matching()
    {
        //没有匹配到就继续匹配

        while (!IsMatched)
        {
            lock (LocObj)
            {
                try
                {
                    CTUser man      = mPool[GlobalVar.SEX_MALE].MatchUser();
                    CTUser stranger = mPool[GlobalVar.SEX_FEMALE].MatchUser();
                    if (stranger != null && man != null)
                    {
                        string id = System.Guid.NewGuid().ToString();
                        man.Chatid      = id;
                        stranger.Chatid = id;
                        moveUser(GlobalVar.STATE_BUSY, man.Uid);
                        moveUser(GlobalVar.STATE_BUSY, stranger.Uid);
                        //推送给用户匹配成功通知
                        List <CTUser> listuser = new List <CTUser>();
                        listuser.Add(man);
                        listuser.Add(stranger);
                        mChattingRoom.Add(id, listuser);
                        //推送信息包括:State:success,Stranger:uid
                        CTData <string> data = new CTData <string>();
                        data.DataType = CTData <string> .DATATYPE_REPLY;
                        data.Body     = stranger.Uid;
                        CTPushMsg.Send(man.ConnectionId, JsonConvert.SerializeObject(data));
                        data.Body = man.Uid;
                        CTPushMsg.Send(stranger.ConnectionId, JsonConvert.SerializeObject(data));
                    }
                }
                catch
                {
                    mMatchThread = new Thread(Matching);
                    mMatchThread.Start();
                }
            }
            if (mPool[GlobalVar.SEX_MALE].isPendingEmpty() || mPool[GlobalVar.SEX_FEMALE].isPendingEmpty())
            {
                Thread.Sleep(2000);
            }
            Thread.Sleep(1000);
        }
    }
示例#9
0
 //登录操作
 public void AddUser(CTUser user)
 {
     lock (LocObj)
     {
         if (mList != null)
         {
             if (!mList.ContainsKey(user.Uid))
             {
                 mList.Add(user.Uid, user);
             }
             else
             {
                 mList[user.Uid] = user;//异常掉线更新
             }
         }
     }
 }
示例#10
0
    public bool moveUser(int to, string uid)
    {
        Dictionary <string, CTUser> tmp = null;

        tmp = mPool[ctUtils.getSexbyUid(uid)].hasUser(uid);
        if (tmp != null)
        {
            CTUser user = mPool[ctUtils.getSexbyUid(uid)].MoveUser(tmp, to, uid);

            //解决聊天室 单向关闭
            if (user != null && to == GlobalVar.STATE_NONE)
            {
                lock (LocObj)
                {
                    if (mChattingRoom.ContainsKey(user.Chatid))
                    {
                        List <CTUser> list = mChattingRoom[user.Chatid];
                        foreach (CTUser tu in list)
                        {
                            if (!tu.Uid.Equals(user.Uid))
                            {
                                tu.Chatid = "";
                                tu.State  = GlobalVar.STATE_PENDING + "";
                                moveUser(GlobalVar.STATE_PENDING, tu.Uid);
                                CTData <string> msg = new CTData <string>();
                                msg.DataType = CTData <string> .DATATYPE_CONNECTED;
                                msg.Body     = "next";
                                CTPushMsg.Send(tu.ConnectionId, JsonConvert.SerializeObject(msg));
                            }
                        }
                        mChattingRoom.Remove(user.Chatid);
                        user.Chatid = "";
                    }
                }
            }
            return(true);
        }
        else
        {
            return(false);
        }
    }
示例#11
0
    public bool moveUser(int to, string uid)
    {
        Dictionary <string, CTUser> tmp = null;

        tmp = mPool[ctUtils.getSexbyUid(uid)].hasUser(uid);
        if (tmp != null)
        {
            CTUser user = mPool[ctUtils.getSexbyUid(uid)].MoveUser(tmp, to, uid);

            //解决聊天室 单向关闭
            if (user != null)
            {
                lock (LocObj)
                {
                    if (mChattingRoom.ContainsKey(user.Chatid))
                    {
                        List <CTUser> list = mChattingRoom[user.Chatid];
                        foreach (CTUser tu in list)
                        {
                            if (!tu.Uid.Equals(user.Uid))
                            {
                                tu.Chatid = "";
                                tu.State  = GlobalVar.STATE_PENDING + "";
                                moveUser(GlobalVar.STATE_PENDING, tu.Uid);
                                CTPushMsg.Send(tu.ConnectionId, "结束聊天");
                            }
                        }
                        mChattingRoom.Remove(user.Chatid);
                    }
                }
            }
            return(true);
        }
        else
        {
            return(false);
        }
    }
示例#12
0
 //新用户加入
 public void addUser(CTUser user)
 {
     if (user == null || user.School == null || user.School.SCode.Equals(""))
     {
         return;
     }
     if (mPool.ContainsKey(user.School.SCode))
     {
         mPool[user.School.SCode].addUser(user);
         if (mPool[user.School.SCode].IsMatched)
         {
             mPool[user.School.SCode].StartMatch();
         }
     }
     else
     {
         ctUserPool tmpUserPool = new ctUserPool();
         tmpUserPool.addUser(user);
         tmpUserPool.StartMatch();
         mPool.Add(user.School.SCode, tmpUserPool);
         schoolCount++;
     }
     count++;
 }
示例#13
0
    protected override Task OnReceived(IRequest request, string connectionId, string data)
    {
        /***********************2017-09-08  邵国鑫***/
        //1.转发消息到对应id
        //2.连接信息 添加新用户
        lock (LocObj)
        {
            try
            {
                CTData <Object> d = new CTData <Object>();
                d = JsonConvert.DeserializeObject <CTData <Object> >(data);
                //初始json
                if (d != null)
                {
                    switch (d.DataType)
                    {
                    case CTData <Object> .DATATYPE_CONNECTED:
                        lock (LocObj)
                        {
                            CTData <CTUser> s    = JsonConvert.DeserializeObject <CTData <CTUser> >(data);
                            CTUser          user = s.Body;
                            user.ConnectionId = connectionId;
                            CTAreaPool.getInstance().addUser(user);
                            CTUserBase userbase = new CTUserBase();
                            userbase.Sex    = user.Sex;
                            userbase.Uid    = user.Uid;
                            userbase.School = user.School;
                            if (!GlobalVar.mClients.ContainsKey(connectionId))
                            {
                                GlobalVar.mClients.Add(connectionId, userbase);
                            }
                            else
                            {
                                GlobalVar.mClients[connectionId] = userbase;
                            }
                            if (!mFastClients.ContainsKey(user.Uid))
                            {
                                mFastClients.Add(user.Uid, connectionId);
                            }
                            else
                            {
                                mFastClients[user.Uid] = connectionId;
                            }
                        }
                        break;

                    case CTData <Object> .DATATYPE_MESSAGE:
                        CTData <CTMessage> ctmsg = JsonConvert.DeserializeObject <CTData <CTMessage> >(data);
                        CTMessage          msg   = ctmsg.Body;
                        if (mFastClients.Count > 0 && mFastClients.ContainsKey(msg.To))
                        {
                            Connection.Send(mFastClients[msg.To], data);
                        }

                        /*
                         *
                         *
                         * switch (msg.Type)
                         * {
                         *  //文本信息
                         *  case CTMessage.MESSAGE_TYPE_TEXT:
                         *
                         *      break;
                         *  case CTMessage.MESSAGE_TYPE_EMOJI: break;
                         *  case CTMessage.MESSAGE_TYPE_AUDIO: break;
                         *  case CTMessage.MESSAGE_TYPE_PHOTO: break;
                         * }*/
                        break;
                    }
                }
            }
            catch (Exception e)
            {
                string x = e.Message;
            }
        }
        return(base.OnReceived(request, connectionId, data));
    }