コード例 #1
0
        private static void sendLoginSuccess(AsyncSocketServer server, Guid ConnectionID)
        {
            StreamPackage <ResultMessage> result = new StreamPackage <ResultMessage>();

            result.Command  = Command.Login;
            result.Data.Ret = 0;
            server.Send(ConnectionID, result.DataBytes());
        }
コード例 #2
0
ファイル: Program.cs プロジェクト: zhilangtaosha/elearning
        private static void sendFriendsMessage()
        {
            StreamPackage <FriendsMessage> friendPost = new StreamPackage <FriendsMessage>();

            friendPost.Command  = Command.Friends;
            friendPost.Data.UID = Tools.RndInt(10000, 99999);
            client.Send(friendPost.DataBytes());
        }
コード例 #3
0
ファイル: Program.cs プロジェクト: zhilangtaosha/elearning
        private static void sendLoginMessage()
        {
            StreamPackage <LoginMessage> loginPost = new StreamPackage <LoginMessage>();

            loginPost.Command  = Command.Login;
            loginPost.Data.UID = Tools.RndInt(10000, 99999);
            client.Send(loginPost.DataBytes());
        }
コード例 #4
0
        private static void broadcastMessage(int uid)
        {
            StreamPackage <LabaMessage> labaPost = new StreamPackage <LabaMessage>();

            labaPost.Command   = Command.BigData;
            labaPost.Data.Data = uid.ToString() + "上线了!";
            server.Broadcast(labaPost.DataBytes());

            ServerMsg(labaPost.Data.Data);
        }
コード例 #5
0
ファイル: Program.cs プロジェクト: zhilangtaosha/elearning
        private static void sendBigMessage()
        {
            for (var i = 0; i < 10; i++)
            {
                StreamPackage <LabaMessage> bigPost = new StreamPackage <LabaMessage>();
                bigPost.Command   = Command.BigData;
                bigPost.Data.Data = "第" + i.ToString() + "个大数据:" + Tools.RndString(Tools.RndInt(100, 10000));
                client.Send(bigPost.DataBytes());

                ClientMsg(bigPost.Data.Data);
            }
        }
コード例 #6
0
        public void Close(bool isCallback = true)
        {
            if (socket != null)
            {
                socket.Close();
            }

            if (currentPackage != null)
            {
                currentPackage.Clear();
            }

            if (readStream != null)
            {
                readStream.Close();
            }

            if (binaryReader != null)
            {
                binaryReader.Close();
            }

            if (writeStream != null)
            {
                writeStream.Close();
            }

            if (binaryWriter != null)
            {
                binaryWriter.Close();
            }

            currentPackage = null;
            receiveThread  = null;
            socket         = null;

            CloseCheckConnectingTimer();
            CloseCheckConnectedTimer();

            if (isCallback)
            {
                SetState(ConnectState.Close);
            }
        }
コード例 #7
0
        private static void sendFriendsMessage(AsyncSocketServer server, Guid ConnectionID)
        {
            StreamPackage <UsersMessage> usersMessage = new StreamPackage <UsersMessage>();

            usersMessage.Command   = Command.Friends;
            usersMessage.Data.List = new List <UserMessage>()
            {
                new UserMessage()
                {
                    UID = 1, NickName = "11", Avatar = "111"
                },
                new UserMessage()
                {
                    UID = 2, NickName = "22", Avatar = "222"
                },
                new UserMessage()
                {
                    UID = 3, NickName = "33", Avatar = "333"
                }
            };
            server.Send(ConnectionID, usersMessage.DataBytes());
        }
コード例 #8
0
        /// <summary>
        /// 将接收到的字节转成数据包
        /// </summary>
        /// <param name="e">接收数据</param>
        /// <param name="littleEndian">小端</param>
        /// <param name="maxPackageSize">最大包大小</param>
        /// <returns>数据包数 null为非法数据包</returns>
        public IList <INetPackage> Parse(AsyncSocketTokenEventArgs e, bool littleEndian = true, int maxPackageSize = 10240)
        {
            //lock (((ICollection)lockers).SyncRoot) { }
            if (!lockers.ContainsKey(e.ConnectionID))
            {
                lockers[e.ConnectionID] = new object();
            }

            lock (lockers[e.ConnectionID]) {
                if (cache.ContainsKey(e.ConnectionID))
                {
                    cache[e.ConnectionID] = EndianHelper.UnionBytes(cache[e.ConnectionID], e.ReceivedBytes);
                }
                else
                {
                    cache[e.ConnectionID] = EndianHelper.UnionBytes(null, e.ReceivedBytes);
                }

                byte[] data  = cache[e.ConnectionID];
                int    count = data.Length;
                if (count <= 4)
                {
                    return(new List <INetPackage>());
                }
                if (count > maxPackageSize)
                {
                    return(null);
                }

                IList <INetPackage> packs = new List <INetPackage>();
                while (count > 4)
                {
                    using (System.IO.MemoryStream stream = new System.IO.MemoryStream(data)) {
                        StreamReader reader = new StreamReader(stream, littleEndian);
                        int          length = reader.ReadInt();
                        if (length > 0 && count >= length + 4)
                        {
                            INetPackage package = new StreamPackage();

                            byte[] result = new byte[length];
                            System.IO.MemoryStream resultStream = new System.IO.MemoryStream(result);
                            stream.Position = 4;
                            stream.Read(result, 0, length);
                            package.Stream  = new StreamReader(resultStream, littleEndian);
                            package.Command = package.Stream.ReadInt();

                            data            = new byte[count - length - 4];
                            stream.Position = length + 4;
                            stream.Read(data, 0, count - length - 4);
                            cache[e.ConnectionID] = data;

                            packs.Add(package);
                            count = count - length - 4;
                        }
                        else
                        {
                            if (length < 0)
                            {
                                cache[e.ConnectionID] = null;
                            }
                            return(packs);
                        }
                    }
                }
                return(packs);
            }
        }
コード例 #9
0
 private void CreateMessage(StreamPackage package)
 {
     receiveCallback(package.msgType, package.msgBytes);
     package.Clear();
 }