Пример #1
0
        private List <IMUserInfo> GetMyFriends(string userID)
        {
            List <IMUserInfo> myfriends = new List <IMUserInfo>();


            lock (syncLocker)
            {
                List <IMUserInfo> list    = null;
                string            cachKey = "UserInfoDataAccess_GetIMUserList";

                object o = Sharp.Common.CacheContainer.GetCache(cachKey);
                if (o == null)
                {
                    list = new UserInfoClient().GetIMUserList().List();
                    Sharp.Common.CacheContainer.AddCache(cachKey, list, 60 * 60);//缓存1小时
                }
                else
                {
                    list = o as List <IMUserInfo>;
                }
                foreach (IMUserInfo theuser in list)
                {
                    if (theuser.ID == userID)
                    {
                        continue;
                    }
                    //判断其他好友是否在线
                    IMUserInfo myfriend = theuser.Clone();
                    myfriend.IsOnline = userManager.ContainsKey(theuser.ID);
                    myfriends.Add(myfriend);
                }
            }
            return(myfriends);
        }
Пример #2
0
 //用户状态改变通知<5>
 private void IncomingUserStateNotify(PacketHeader header, Connection connection, UserStateContract userStateContract)
 {
     lock (syncLocker)
     {
         IMUserInfo u = Common.GetFriend(userStateContract.UserID);
         if (u != null)
         {
             ChatListSubItem item = userItem[userStateContract.UserID];
             if (item != null)
             {
                 IMUserInfo user = item.Tag as IMUserInfo;
                 if (user != null)
                 {
                     if (userStateContract.OnLine == OnlineState.Online)
                     {
                         u.UserState   = (int)OnlineState.Online;
                         item.Status   = ChatListSubItem.UserStatus.Online;
                         user.IsOnline = true;
                     }
                     else
                     {
                         u.UserState   = (int)OnlineState.Offline;
                         item.Status   = ChatListSubItem.UserStatus.OffLine;
                         user.IsOnline = false;
                         //当某用户下线后,删除此用户相关的p2p 通道
                         Common.RemoveUserConn(userStateContract.UserID);
                     }
                 }
             }
         }
     }
 }
Пример #3
0
 public chatMain(IMUserInfo friend)
     : this()
 {
     // TODO: Complete member initialization
     this.friend = friend;
     //labelFriendName.Text = friend.DisplayName;
     //labelFriendSignature.Text = friend.DisplaySignature;
     //this.Text = "正在和" + labelFriendName.Text + "对话";
 }
Пример #4
0
 public static void AddFriend(string userID, IMUserInfo theUser)
 {
     lock (dictLocker)
     {
         if (AllUserDic.ContainsKey(userID))
         {
             AllUserDic.Remove(userID);
         }
         AllUserDic.Add(userID, theUser);
     }
 }
Пример #5
0
        public static string AutoLog(string userNo, string Pwd)
        {
            string         error = string.Empty;
            ConnectionInfo connInfo;
            Connection     newTcpConnection;

            try
            {
                connInfo         = new ConnectionInfo(Common.ServerIP, Common.Port);
                newTcpConnection = TCPConnection.GetConnection(connInfo);
                Common.TcpConn   = newTcpConnection;
                connInfo.LocalEndPoint.Address = IPAddress.Parse(Sharp.Common.Utils.GetMachineIP());
                TCPConnection.StartListening(connInfo.LocalEndPoint);

                //在契约类中保存用户名和密码
                IMUserInfo userinfo = new IMUserInfo();
                userinfo.Code = userNo;
                userinfo.Pwd  = Pwd;

                //发送契约类给服务器端,并获取返回的结果
                UserLoginContract loginContract = newTcpConnection.
                                                  SendReceiveObject <UserLoginContract>("UserLogin", "ResUserLogin", 80000, userinfo);
                //如果登陆成功
                if (string.IsNullOrWhiteSpace(loginContract.Message))
                {
                    //为简便,在此处使用了静态类保存用户相关信息
                    Common.CurrentUser = loginContract.UserContract;
                    Common.ConnInfo    = connInfo;
                    if (OnLoginSucced != null)
                    {
                        OnLoginSucced();
                    }
                }
                else
                {
                    error = loginContract.Message;
                }
            }
            catch (Exception ex)
            {
                error = ex.Message;
            }

            return(error);
        }
Пример #6
0
        //#region 向用户终端发送消息
        ////public void sendMsgToOneUser(ClassMsg msg, System.Net.IPAddress Ip, int Port)//发送消息到用户的一个联系人
        ////{
        ////    msg.ID = selfInfo.ID;//标识本人的ID号
        ////    this.sockUDP1.Send(Ip, Port, new ClassSerializers().SerializeBinary(msg).ToArray());
        ////}
        //#endregion

        //#region 接收数据方法
        //private void sockUDP1_DataArrival(byte[] Data, System.Net.IPAddress Ip, int Port)
        //{
        //    //DataArrivaldelegate outdelegate = new DataArrivaldelegate(DataArrival);
        //    //this.BeginInvoke(outdelegate, new object[] { Data, Ip, Port });
        //}

        //private delegate void DataArrivaldelegate(byte[] Data, System.Net.IPAddress Ip, int Port);

        ////private void DataArrival(byte[] Data, System.Net.IPAddress Ip, int Port)
        ////{
        ////    ClassMsg msg = new ClassSerializers().DeSerializeBinary((new System.IO.MemoryStream(Data))) as ClassMsg;
        ////    switch (msg.MsgInfoClass)
        ////    {
        ////        case -1:
        ////            //MessageBox.Show(msg.MsgContent);
        ////            break;
        ////        case 0://有用户离线
        ////            userSingnOut(msg.ID);//处理用户离线
        ////            break;
        ////        case 1://服务器告诉自己已经登录,登录过程
        ////            SuccessLogin(msg);
        ////            break;
        ////        case 2://服务器告诉用户自己目前在线
        ////            //updateSelfState();//更新当前用户在线状态
        ////            break;
        ////        case 3://服务器告诉用户有新的联系人登录
        ////            NewUserLogin(new ClassSerializers().DeSerializeBinary((new System.IO.MemoryStream(msg.MsgContent))) as ClassUserInfo);//添加新登录的用户资料
        ////            break;
        ////        case 4://收到用户部分联系人的资料
        ////            UsersDataArrival((new ClassSerializers().DeSerializeBinary((new System.IO.MemoryStream(msg.MsgContent))) as ClassUsers));//收到用户所有联系人的资料
        ////            break;
        ////        case 5://收到用户联系人发送来的对话消息
        ////            //UserChatArrival(msg, Ip, Port);//处理对话消息
        ////            break;
        ////        case 6://联系人返回已经收到刚才发送的对话消息
        ////            //returnChatArrival(msg.ID);//联系人返回已经收到刚才发送的对话消息
        ////            break;
        ////        case 7:
        ////            //收到联系人发送来的群发通知消息
        ////            //noticeArrival(msg, Ip, Port);//处理联系人发送来的群发通知消息
        ////            break;
        ////        case 10://收到联系人发出发送文件请求
        ////            //sendFileRequest(msg, Ip, Port);
        ////            break;
        ////        case 11://收到联系人发送来的gif图片流
        ////            //UserGifArrival(msg, Ip, Port);//处理gif图片消息
        ////            break;
        ////        case 12://收到用户发送来的文本消息
        ////            UserTextChatArrival(msg, Ip, Port);//处理用户发送来的文本消息
        ////            break;
        ////    }

        ////}

        ////private void UsersDataArrival(ClassUsers users)//收到用户所有联系人的资料
        ////{
        ////    ClassUserInfo UserInfo;
        ////    foreach (ClassUserInfo userinfo in users)
        ////    {
        ////        UserInfo = findUser(userinfo.ID);
        ////        if (userinfo.ID == selfInfo.ID)
        ////            break;//如果新登录的联系人是自己则退出
        ////        if (UserInfo == null)
        ////        {
        ////            this.MyUsers.add(userinfo);
        ////            ChatListSubItem subItem = new ChatListSubItem(userinfo.ID, userinfo.UserName, userinfo.AssemblyVersion,
        //ChatListSubItem.UserStatus.Online);
        ////            this.chatListBox.Items[1].SubItems.AddAccordingToStatus(subItem);
        ////            //updateGroupInfo(userinfo);


        ////        }
        ////        else
        ////        {
        ////            ClassUserInfo user = new ClassUserInfo();
        ////            user.ID = userinfo.ID;
        ////            user.IP = userinfo.IP;
        ////            user.Port = userinfo.Port;
        ////            user.AssemblyVersion = userinfo.AssemblyVersion;
        ////            this.UpdateUser(user);//更新用户状态

        ////            foreach (ChatListItem item in chatListBox.Items)
        ////            {
        ////                foreach (ChatListSubItem subItem in item.SubItems)
        ////                {
        ////                    if (subItem.Tag.ToString().ToLower() == user.ID.ToLower())
        ////                    {
        ////                        subItem.Status = ChatListSubItem.UserStatus.Online;
        ////                        break;
        ////                    }

        ////                }
        ////            }
        ////        }
        ////    }
        ////}
        ////private void UserTextChatArrival(ClassMsg msg, System.Net.IPAddress Ip, int Port)//处理用户发送来的文本消息
        ////{

        ////    ClassUserInfo userinfo = this.findUser(msg.ID);
        ////    if (userinfo != null)
        ////    {
        ////        string title = userinfo.UserName + "(" + System.DateTime.Now.ToString() + ")";
        ////        //MsgAddToDB(msgRtf,msg.ID,selfInfo.ID,msg.AssemblyVersion,System.DateTime.Now.ToString(),true);//将消息添加进数据库
        ////    //    foreach (System.Windows.Forms.Form form in forms)
        ////    //        if (form.Tag.ToString() == userinfo.ID)
        ////    //        {
        ////    //            frmchatMain f = (form as frmchatMain);
        ////    //            f.newTextMsg(msg.MsgContent, title, new System.Drawing.Font("宋体", 10), Color.Blue);
        ////    //            f.Activate();
        ////    //            return;
        ////    //        }

        ////    //    frmchatMain newf = new frmchatMain();
        ////    //    newf.Tag = msg.ID;
        ////    //    newf.Text = "与 " + userinfo.UserName + "(" + userinfo.ID + ") 对话";
        ////    //    newf.setUserName(userinfo.UserName);
        ////    //    newf.newTextMsg(msg.MsgContent, title, new System.Drawing.Font("宋体", 10), Color.Blue);
        ////    //    forms.add(newf);
        ////    //    //ShowNotifyIcon(1, "", "收到 " + userinfo.UserName + "(" + userinfo.ID + ") 发送给您的新消息。");
        ////    //    newf.Show();

        ////     }
        ////}
        //#endregion

        //#region 接收后信息的回调方法
        //private void userSingnOut(string msgID)
        //{


        //    //RemoveUser(msgID);
        //    foreach (ChatListSubItem subItem in this.chatListBox.Items[1].SubItems)
        //    {

        //        if (subItem.NicName == msgID)
        //        {
        //            subItem.Status = ChatListSubItem.UserStatus.OffLine;
        //            break;
        //        }
        //    }
        //    //this.chatListBox.Items[1].SubItems[0].Status = "";
        //}

        ////private void SuccessLogin(ClassMsg msg)//服务器告诉用户已经成功登录的处理过程
        ////{
        ////this.Text="成功登陆";
        ////ClassUserInfo self = (new ClassSerializers().DeSerializeBinary(new System.IO.MemoryStream(msg.MsgContent))) as ClassUserInfo;
        ////selfInfo.UserName = self.UserName;
        ////selfInfo.State = 1;

        ////ShowNotifyIcon(1,"","LanMsg已经成功登录服务器。");
        ////}

        ////private void NewUserLogin(ClassUserInfo userinfo)//添加新登录的用户资料
        ////{


        ////    if (userinfo.ID == selfInfo.ID)
        ////        return;//如果新登录的联系人是自己则退出
        ////    //this.Text="新用户"+ userinfo.ID;
        ////    ClassUserInfo UserInfo;
        ////    UserInfo = findUser(userinfo.ID);

        ////    if (UserInfo == null)
        ////    {
        ////        this.MyUsers.add(userinfo);
        ////        ChatListSubItem subItem = new ChatListSubItem(userinfo.ID, userinfo.UserName, userinfo.AssemblyVersion, ChatListSubItem.UserStatus.Online);
        ////        this.chatListBox.Items[1].SubItems.AddAccordingToStatus(subItem);

        ////        // 增加一个新用户
        ////    }
        ////    else
        ////    {
        ////        ClassUserInfo user = new ClassUserInfo();
        ////        user.ID = userinfo.ID;
        ////        user.IP = userinfo.IP;
        ////        user.Port = userinfo.Port;
        ////        user.AssemblyVersion = userinfo.AssemblyVersion;
        ////        this.UpdateUser(user);//更新用户状态

        ////        foreach (ChatListItem item in chatListBox.Items)
        ////        {
        ////            foreach (ChatListSubItem subItem in item.SubItems)
        ////            {
        ////                if (subItem.Tag.ToString().ToLower() == user.ID.ToLower())
        ////                {
        ////                    subItem.Status = ChatListSubItem.UserStatus.Online;
        ////                    break;
        ////                }

        ////            }
        ////        }
        ////        //更改新用户的状态
        ////    }
        ////    // MessageBox.Show("1");

        ////}
        //#endregion

        //#region 操作当前用户的方法
        ////public ClassUserInfo findUser(string ID)//在我的用户列表中查找用户ID
        ////{
        ////    foreach (ClassUserInfo userinfo in this.MyUsers)
        ////        if (userinfo.ID.ToLower() == ID.ToLower())
        ////            return userinfo;
        ////    return null;
        ////}

        /////// <summary>
        /////// 更新用户状态 IP 和端口信息
        /////// </summary>
        /////// <param name="user"></param>
        ////public void UpdateUser(ClassUserInfo user)
        ////{
        ////    //更新用户状态 IP 和端口信息
        ////    foreach (ClassUserInfo userinfo in this.MyUsers)
        ////    {
        ////        if (userinfo.ID.ToLower() == user.ID.ToLower())
        ////        {
        ////            userinfo.State = user.State;
        ////            userinfo.IP = user.IP;
        ////            userinfo.Port = user.Port;
        ////            break;
        ////        }
        ////    }
        ////}

        ////public void RemoveUser(string ID)
        ////{
        ////    foreach (ClassUserInfo userinfo in this.MyUsers)
        ////    {
        ////        if (userinfo.ID.ToLower() == ID.ToLower())
        ////        {
        ////            this.MyUsers.Romove(userinfo);
        ////            break;
        ////        }
        ////    }

        ////}

        //#endregion

        //#region 设置一些用户菜单事件


        //private void skinButton_State_Click(object sender, EventArgs e)
        //{
        //    this.skinContextMenuStrip_State.Show(skinButton_State, new Point(0, skinButton_State.Height), ToolStripDropDownDirection.Right);
        //}

        //private void toolStripMenuItem20_Click(object sender, EventArgs e)
        //{
        //    ToolStripMenuItem Item = (ToolStripMenuItem)sender;
        //    skinButton_State.Image = Item.Image;
        //    skinButton_State.Tag = Item.Tag;
        //    // this.myselfChatListSubItem.Status = (ChatListSubItem.UserStatus)Convert.ToInt32(skinButton_State.Tag);

        //}

        //private void toolStripMenuItem30_Click(object sender, EventArgs e)
        //{
        //    ToolStripMenuItem Item = (ToolStripMenuItem)sender;
        //    skinButton_State.Image = Item.Image;
        //    skinButton_State.Tag = Item.Tag;
        //}

        //private void toolStripMenuItem31_Click(object sender, EventArgs e)
        //{
        //    ToolStripMenuItem Item = (ToolStripMenuItem)sender;
        //    skinButton_State.Image = Item.Image;
        //    skinButton_State.Tag = Item.Tag;
        //}

        //private void toolStripMenuItem32_Click(object sender, EventArgs e)
        //{
        //    ToolStripMenuItem Item = (ToolStripMenuItem)sender;
        //    skinButton_State.Image = Item.Image;
        //    skinButton_State.Tag = Item.Tag;
        //}

        //private void toolStripMenuItem33_Click(object sender, EventArgs e)
        //{
        //    ToolStripMenuItem Item = (ToolStripMenuItem)sender;
        //    skinButton_State.Image = Item.Image;
        //    skinButton_State.Tag = Item.Tag;
        //}

        //#endregion

        #region 双击打开用户列表
        private void chatListBox_DoubleClickSubItem(object sender, ChatListEventArgs e)
        {
            ChatListSubItem item = e.SelectSubItem;

            if (item.NicName == "网页用户")
            {
                IMUserInfo friend = new IMUserInfo();
                friend.ID        = item.Tag.ToString();
                friend.NickyName = "网页用户";
                friend.Signature = "网页用户";
                item.IsTwinkle   = false;//不闪烁
                FormManager.Instance.ActivateOrCreateFormSend(item.Tag.ToString(), friend);
            }
            else
            {
                IMUserInfo chatuser = item.Tag as IMUserInfo;
                item.IsTwinkle = false;//不闪烁

                FormManager.Instance.ActivateOrCreateFormSend(chatuser);
            }
        }
Пример #7
0
        internal void ActivateOrCreateFormSend(string userid, IMUserInfo chatuser)
        {
            lock (locker)
            {
                IManagedForm form = GetForm(userid);

                if (form == null)
                {
                    chatMain f = new chatMain(chatuser);
                    form = f;
                    Add(f);
                    f.Show();
                }
                (form as chatMain).Activate();
                if (Common.ContainsMsg(userid))
                {
                    (form as chatMain).ShowOtherTextChat(userid, Common.GetMsgContractList(userid));
                    Common.RemoveMsg(userid);
                }
            }
        }
Пример #8
0
        internal void ActivateOrCreateFormSend(IMUserInfo chatuser)
        {
            lock (locker)
            {
                IManagedForm form = GetForm(chatuser.ID);

                if (form == null)
                {
                    frmchatMain f = new frmchatMain(chatuser);
                    form = f;
                    Add(f);
                }
                (form as frmchatMain).Show();
                (form as frmchatMain).Activate();
                if (Common.ContainsMsg(chatuser.ID))
                {
                    (form as frmchatMain).ShowOtherTextChat(chatuser.ID, Common.GetMsgContractList(chatuser.ID));
                    Common.RemoveMsg(chatuser.ID);
                }
            }
        }
Пример #9
0
        private void 呼叫ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            ToolStripMenuItem item = sender as ToolStripMenuItem;

            if (string.IsNullOrWhiteSpace(Common.CurrentUser.AgentID))
            {
                MessageBox.Show("当前用户没有分机号,不能" + item.Text);
                return;
            }

            if (chatListBox.SelectSubItem != null && chatListBox.SelectSubItem.Tag != null)
            {
                IMUserInfo user = chatListBox.SelectSubItem.Tag as IMUserInfo;
                if (user != null)
                {
                    if (user.IsOnline)
                    {
                        if (string.IsNullOrEmpty(user.AgentID))
                        {
                            MessageBox.Show("该用户没有分机号,不能" + item.Text);
                        }
                        else
                        {
                            if (item == 呼叫转移ToolStripMenuItem)
                            {
                                CallTalkFactory.GetCallInstance().Transfer(Common.CurrentUser.AgentID, user.AgentID);
                            }
                            else
                            {
                                CallTalkFactory.GetCallInstance().OutCall(user.AgentID);
                            }
                        }
                    }
                    else
                    {
                        MessageBox.Show("该用户不在线,不能" + item.Text);
                    }
                }
            }
        }
Пример #10
0
        public static void SendMess(string userid, string mes, string toid)
        {
            try
            {
                ConnectionInfo connInfo;

                string[] ipAndPort = new FrameCommonClient.ParameterInfoClient().GetTwoValue("ecda7fbe-cf9d-4d89-b478-d31da5d0a7f8");
                int      port      = int.Parse(ipAndPort[1]);
                connInfo = new ConnectionInfo(ipAndPort[0], port);
                if (newTcpConnection == null)
                {
                    //InitConnection();
                    newTcpConnection = TCPConnection.GetConnection(connInfo);
                    TCPConnection.StartListening(connInfo.LocalEndPoint);
                    AuthorityEntity.IM.IMUserInfo userinfo = new IMUserInfo();
                    userinfo.ID       = "SB_WEB_INFO";
                    userinfo.Code     = "SB_WEB_INFO";
                    userinfo.IsWebMsg = true;
                    UserLoginContract loginContract = newTcpConnection.
                                                      SendReceiveObject <UserLoginContract>("UserLogin", "ResUserLogin", 80000, userinfo);
                    NetworkComms.AppendGlobalIncomingPacketHandler <MsgEntity>("ServerChatMessage", IncomingChatMessage);
                }
                MsgEntity chatContract = new MsgEntity();
                chatContract.SenderID = userid;
                chatContract.Reciver  = toid;

                chatContract.MsgContent  = mes;
                chatContract.SendTime    = DateTime.Now;
                chatContract.MsgSendType = 4;
                //chatContract.IsWebMsg = true;
                //chatContract.ImageList = imageWrapperList;
                newTcpConnection.SendObject("ChatMessage", chatContract);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
Пример #11
0
 public void OnGetUserInfo(YIMEngine.ErrorCode code, IMUserInfo userInfo)
 {
 }
Пример #12
0
        //处理用户登录
        private void IncomingLoginHandler(PacketHeader header, Connection Connection, IMUserInfo loginInfo)
        {
            try
            {
                //从数据库中验证登录信息
                string      ip       = Connection.ConnectionInfo.LocalEndPoint.ToString();
                string      port     = Connection.ConnectionInfo.LocalEndPoint.Port.ToString();
                string      error    = string.Empty;
                View_IMUser userinfo = null;
                if (loginInfo.IsWebMsg)
                {
                    userinfo      = new View_IMUser();
                    userinfo.ID   = loginInfo.Code;
                    userinfo.Code = loginInfo.Code;
                    userinfo.Name = "网页用户";
                }
                else
                {
                    userinfo = new AuthorityClient.LoginClient().Login(loginInfo.Code, loginInfo.Pwd, ip, port, out error);
                }

                if (userinfo == null)
                {
                    UserLoginContract resContract = new UserLoginContract(error, null);
                    Connection.SendObject("ResUserLogin", resContract);
                }
                else
                {
                    UserLoginContract resContract = new UserLoginContract(error, userinfo.Clone());
                    Connection.SendObject("ResUserLogin", resContract);
                    if (string.IsNullOrWhiteSpace(error))
                    {
                        lock (syncLocker)
                        {
                            //同一账号登陆,先退出已经登陆的客户端
                            if (userManager.ContainsKey(userinfo.ID))
                            {
                                //通知相应的连接,关闭此连接
                                foreach (Connection conn in NetworkComms.GetExistingConnection(userManager[userinfo.ID], ConnectionType.TCP))
                                {
                                    conn.SendObject("CloseConnection", "msg");
                                }

                                userManager.Remove(userinfo.ID);
                            }
                            //注册新的用户
                            if (!userManager.ContainsKey(userinfo.ID))
                            {
                                userManager.Add(userinfo.ID, Connection.ConnectionInfo.NetworkIdentifier);
                            }
                        }

                        //用户上线后,通知其他用户
                        UserStateNotify(userinfo.ID, OnlineState.Online);
                    }
                }
            }
            catch (Exception ex)
            {
                LogTools.LogException(ex, "IncomingLoginHandler");
            }
        }