Esempio n. 1
0
        static void server_offline(object sender, ServerAcceptEventArgs args)
        {
            Debug.WriteLine("OffLine!");
            var str = tcpmap[sender as TcpClient];

            server.ServerSendAll(new UserMessage(8, str, 0));
        }
Esempio n. 2
0
 static void server_offline(object sender, ServerAcceptEventArgs args)
 {
     try{
         Debug.WriteLine("OffLine!");
         var str = tcpmap[sender as TcpClient];
         server.ServerSendAll(new UserMessage(8, str, 0));
     }
     catch (Exception e2)
     {
         MessageBox.Show("Server.server_offline" + e2.Message);
     }
 }
Esempio n. 3
0
        /// <summary>
        /// 服务器监听函数
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="args"></param>
        private static void server_accept(object sender, ServerAcceptEventArgs args)
        {
            NetworkStream Ns        = args.client.GetStream();
            var           Formatter = new BinaryFormatter();
            Object        obj       = Formatter.Deserialize(Ns);
            var           Message   = (UserMessage)obj;

            byte[] current_client_ip = UserExt.IPStringToByte(((System.Net.IPEndPoint)(args.client).Client.RemoteEndPoint).Address.ToString());
            if (isdebug)
            {
                Console.WriteLine("Client accept!");
                Console.WriteLine("client ip:" + UserExt.IPByteToString(current_client_ip));
            }


            //获得数据,不同请求类型对应不同的数据
            Object Data = Message.data;

            //定义返回数据
            Object ReturnObject = null;

            switch (Message.type)
            {
            case 1:    //注册功能实现 //添加个人信息至数据库 //返回id给客户端done
                ReturnObject = UserRegist((RegisterData)Data);
                break;

            case 2:    //登陆功能实现,done
                ReturnObject = UserLogin((LoginData)Data, current_client_ip);
                break;

            case 3:     //确认在线,//更新活力值接收在线消息,done
                ReturnObject = HoldLineAndGetMessage((int)Data);
                break;

            case 4:    //邀请好友使用某插件
                ReturnObject = InviteFriendToUsePlugin((List <int>)Data);
                break;

            case 5:    //注册用户名校验,done
                ReturnObject = CheckUsernameRegistable((string)Data);
                break;

            case 6:    //搜索符合条件的好友,目前只是按全名字匹配搜索 = =
                List <User> list_u = SearchUserByName(Data as string);
                foreach (var item in list_u)
                {
                    if (isOnline(item.user_id))
                    {
                        item.ip = OnlineUserManager.user_list[item.user_id].IP;
                    }
                }
                ReturnObject = list_u;
                break;

            case 7:    //添加好友
                ReturnObject = AskToBeFriend((AddFriendData)Data);
                break;

            case 8:     //用户更新资料
                ReturnObject = UserInfoSlefUpdate((User)Data);
                break;

            case 9:    //修改密码 ,如果原密码正确才进行修改密码操作,否则返回-1
                ReturnObject = UserPasswordModify((UpdatePasswordData)Data);
                break;

            case 10:    //获取指定id用户的所有信息
                User ur = SqlManager.getUserById((int)Data, true);
                if (isOnline(ur.user_id))
                {
                    ur.ip = OnlineUserManager.user_list[ur.user_id].IP;
                }
                ReturnObject = ur;
                break;

            case 11:    //根据id获取群组的的数据信息
                ReturnObject = SqlManager.getGroupById((int)Data);
                break;

            case 12:    //批量获取用户和群组的信息
                ReturnObject = "尼玛什么都没有行了吧";
                break;

            case 13:    //处理同意加某人为好友 myid friendid
                ReturnObject = OnlineUserManager.dealToMakeFriend((int[])Data);
                break;

            case 14:    //确认已经读过某消息
                ReturnObject = ConfirnUserMessage((int[])Data);
                break;

            case 15:    //创建新群组
                List <object> temp_pram = (List <object>)Data;
                ReturnObject = SqlManager.createAGroup((int)(temp_pram[0]), (String)(temp_pram[1]), (String)(temp_pram[2]));
                break;
            }
            try
            {
                Formatter.Serialize(Ns, ReturnObject);//将要返回的对象串行化并放入数据流
            }
            catch (Exception e)
            {
                Console.WriteLine("{0}-唉,{1}", Message.type, e.Message);
            }
        }