コード例 #1
0
ファイル: ChatHandlers.cs プロジェクト: superraz375/RazChat
        public static void UpdateUsername(Packet pPacket)
        {
            string username;

            pPacket.ReadString (out username);

            Log.WriteLine (ELogLevel.Info, "Username: {0}", username);
        }
コード例 #2
0
ファイル: ChatHandlers.cs プロジェクト: superraz375/RazChat
        public static void WelcomeMessage(Packet pPacket)
        {
            string message;
            pPacket.ReadString (out message);

            Log.WriteLine (ELogLevel.Info, "Welcome Message: {0}", message);
            Client.sServer.WelcomeMessage = message;
        }
コード例 #3
0
ファイル: ChatHandlers.cs プロジェクト: superraz375/RazChat
        public static void UsernameChange(Client pClient, Packet pPacket)
        {
            string username;
            pPacket.ReadString (out username);

            Log.WriteLine (ELogLevel.Info, "[Server] Username change request recevied: {0} -> {1}", pClient.Username, username);

            Server.UpdateUsername (pClient, username);
        }
コード例 #4
0
ファイル: Client.cs プロジェクト: superraz375/RazChat
        public override void OnReceiveHandshakePacket(Packet pPacket)
        {
            ushort build;
            pPacket.ReadUShort (out build);

            if (build != Config.Instance.Build) {
                Log.WriteLine (ELogLevel.Warn, "[Client] Build version mismatch. Disconnecting from server");
                Disconnect ();
            }
        }
コード例 #5
0
ファイル: Client.cs プロジェクト: superraz375/RazChat
 public override void OnReceivePacket(Packet pPacket)
 {
     PacketHandlerAttribute handler = sHandlers.GetOrDefault (pPacket.Opcode, null);
     if (handler != null)
         Server.AddCallback (() => handler.Processor (this, pPacket));
     else {
         Log.WriteLine (ELogLevel.Debug, "[{0}] Receiving 0x{1}, {2} Bytes", Host, ((ushort)pPacket.Opcode).ToString ("X4"), pPacket.Length);
         pPacket.Dump ();
     }
 }
コード例 #6
0
ファイル: ChatHandlers.cs プロジェクト: superraz375/RazChat
        public static void ChatMessage(Packet pPacket)
        {
            string senderName;
            string message;

            pPacket.ReadString (out senderName);
            pPacket.ReadString (out message);

            Log.WriteLine (ELogLevel.Info, "Chat Message: {0} - {1}", senderName, message);
        }
コード例 #7
0
ファイル: ChatHandler.cs プロジェクト: superraz375/RazChat
        public static void WelcomeMessage(Packet pPacket)
        {
            string message;
            pPacket.ReadString (out message);

            Client.sServer.WelcomeMessage = message;

            Client.window.InvokeOnMainThread (() => {
                Client.window.AddLineToChatHistory (string.Format ("Welcome Message: {0}", message));
            });
        }
コード例 #8
0
ファイル: ChatHandlers.cs プロジェクト: superraz375/RazChat
        public static void ChatMessage(Client pClient, Packet pPacket)
        {
            string message;
            pPacket.ReadString (out message);

            Log.WriteLine (ELogLevel.Info, "[Server] Received Chat Message: {0}", message);

            Packet packet = new Packet(EOpcode.SMSG_CHAT_MESSAGE);
            packet.WriteString (pClient.Username);
            packet.WriteString(message);
            Server.SendPacketToAllExcept (packet, pClient);
        }
コード例 #9
0
ファイル: ChatHandler.cs プロジェクト: superraz375/RazChat
        public static void ChatMessage(Packet pPacket)
        {
            string senderName;
            string message;

            pPacket.ReadString (out senderName);
            pPacket.ReadString (out message);

            Client.window.InvokeOnMainThread (() => {
                Client.window.AddLineToChatHistory (string.Format ("{0}: {1}", senderName, message));
            });
        }
コード例 #10
0
ファイル: ChatHandler.cs プロジェクト: superraz375/RazChat
        public static void UpdateUsername(Packet pPacket)
        {
            bool success = false;
            string username;

            pPacket.ReadBool (out success);

            if (success) {
                pPacket.ReadString (out username);
                Client.sUsername = username;

                Client.window.InvokeOnMainThread (() => {
                    Client.window.AddLineToChatHistory (string.Format ("Username: {0}", username));
                });
            } else {
                Client.window.InvokeOnMainThread (() => {
                    Client.window.AddLineToChatHistory (string.Format ("Cannot update username"));
                });
            }
        }
コード例 #11
0
ファイル: NetworkHost.cs プロジェクト: superraz375/RazChat
 public virtual void OnReceivePacket(Packet pPacket)
 {
 }
コード例 #12
0
ファイル: NetworkHost.cs プロジェクト: superraz375/RazChat
 public virtual void OnReceiveHandshakePacket(Packet pPacket)
 {
 }
コード例 #13
0
ファイル: NetworkHost.cs プロジェクト: superraz375/RazChat
        private void EndReceive(SocketAsyncEventArgs pArguments)
        {
            if (mDisconnected != 0) return;
            if (pArguments.BytesTransferred <= 0)
            {
                if (pArguments.SocketError != SocketError.Success && pArguments.SocketError != SocketError.ConnectionReset) Log.WriteLine(ELogLevel.Error, "[{0}] Receive Error: {1}", Host, pArguments.SocketError);
                Disconnect();
                return;
            }
            mReceiveLength += pArguments.BytesTransferred;

            while (mReceiveLength > 4)
            {
                if (mReceivingPacketLength == 0)
                {
                    mReceivingPacketLength = GetHeaderLength(mReceiveBuffer, mReceiveStart);
                }
                if (mReceivingPacketLength > 0 && mReceiveLength >= mReceivingPacketLength + 4)
                {
                    if (!mReceivedHandshakePacket && mReceiveStart == 0) {
                        // Handshake packet
                        mReceivedHandshakePacket = true;
                        Packet packet = new Packet(mReceiveBuffer, mReceiveStart + 4, mReceivingPacketLength, false);
                        OnReceiveHandshakePacket (packet);

                    } else {
                        Packet packet = new Packet(mReceiveBuffer, mReceiveStart + 4, mReceivingPacketLength);

                        OnReceivePacket (packet);
                    }

                    mReceiveStart += mReceivingPacketLength + 4;
                    mReceiveLength -= mReceivingPacketLength + 4;
                    mReceivingPacketLength = 0;
                    mReceiveLast = DateTime.Now;
                }
            }

            if (mReceiveLength == 0) mReceiveStart = 0;
            else if (mReceiveStart > 0 && (mReceiveStart + mReceiveLength) >= mReceiveBuffer.Length)
            {
                Buffer.BlockCopy(mReceiveBuffer, mReceiveStart, mReceiveBuffer, 0, mReceiveLength);
                mReceiveStart = 0;
            }
            if (mReceiveLength == mReceiveBuffer.Length)
            {
                Log.WriteLine(ELogLevel.Error, "[{0}] Receive Overflow", Host);
                Disconnect();
            }
            else BeginReceive();
        }
コード例 #14
0
ファイル: NetworkHost.cs プロジェクト: superraz375/RazChat
 public void SendPacket(Packet pPacket)
 {
     if (mDisconnected != 0) return;
     byte[] buffer = new byte[pPacket.Length + 4];
     GenerateHeader (buffer, pPacket.Length);
     Buffer.BlockCopy(pPacket.InnerBuffer, 0, buffer, 4, pPacket.Length);
     Send(buffer);
 }
コード例 #15
0
ファイル: Client.cs プロジェクト: superraz375/RazChat
        private static void ConnectCallback(IAsyncResult ar)
        {
            try {
                sServerSocket.EndConnect (ar);
                Log.WriteLine(ELogLevel.Info, "[Client] Connected to Server");

                sServer = new Server(sServerSocket);

                Packet p = new Packet(EOpcode.CMSG_CHAT_MESSAGE);
                p.WriteString("Hello");
                sServer.SendPacket(p);

            } catch (Exception e) {
                sRetryCount++;
                Log.WriteLine(ELogLevel.Info, "[Client] Could not connect to server: {0}", e.Message);

                if (sRetryCount < 3) {
                    Log.WriteLine (ELogLevel.Info, "[Client] Reattempting to connect to server");
                    Thread.Sleep (1000);
                    sServerSocket.BeginConnect ("localhost", 8484, new AsyncCallback (ConnectCallback), null);
                } else {
                    Log.WriteLine (ELogLevel.Error, "[Client] Cannot connect to server");
                }
            }
        }
コード例 #16
0
ファイル: Client.cs プロジェクト: superraz375/RazChat
 public static void SendMessage(string pMessage)
 {
     Packet packet = new Packet (EOpcode.CMSG_CHAT_MESSAGE);
     packet.WriteString (pMessage);
     sServer.SendPacket (packet);
 }
コード例 #17
0
ファイル: Server.cs プロジェクト: superraz375/RazChat
        private void EndReceive(SocketAsyncEventArgs pArguments)
        {
            if (mDisconnected != 0) return;
            if (pArguments.BytesTransferred <= 0)
            {
                if (pArguments.SocketError != SocketError.Success && pArguments.SocketError != SocketError.ConnectionReset) Log.WriteLine(ELogLevel.Error, "[{0}] Receive Error: {1}", Host, pArguments.SocketError);
                Disconnect();
                return;
            }
            mReceiveLength += pArguments.BytesTransferred;

            while (mReceiveLength > 4)
            {
                if (mReceivingPacketLength == 0)
                {
                    mReceivingPacketLength = GetHeaderLength(mReceiveBuffer, mReceiveStart);
                }
                if (mReceivingPacketLength > 0 && mReceiveLength >= mReceivingPacketLength + 4)
                {
                    if (!mReceivedHandshakePacket && mReceiveStart == 0) {
                        // Handshake packet
                        mReceivedHandshakePacket = true;

                        Packet packet = new Packet(mReceiveBuffer, mReceiveStart + 4, mReceivingPacketLength, false);
                        ushort build;
                        packet.ReadUShort (out build);

                        if (build != Config.Instance.Build) {
                            Log.WriteLine (ELogLevel.Warn, "[Client] Build version mismatch. Disconnecting from server");
                            Disconnect ();
                        }

                    } else {
                        Packet packet = new Packet(mReceiveBuffer, mReceiveStart + 4, mReceivingPacketLength);
                        PacketHandlerAttribute handler = sHandlers.GetOrDefault (packet.Opcode, null);
                        if (handler != null)
                            Client.AddCallback (() => handler.Processor (packet));
                        else {
                            Log.WriteLine (ELogLevel.Debug, "[{0}] Receiving 0x{1}, {2} Bytes", Host, ((ushort)packet.Opcode).ToString ("X4"), packet.Length);
                            packet.Dump ();
                        }
                    }

                    mReceiveStart += mReceivingPacketLength + 4;
                    mReceiveLength -= mReceivingPacketLength + 4;
                    mReceivingPacketLength = 0;
                    mReceiveLast = DateTime.Now;
                }
            }

            if (mReceiveLength == 0) mReceiveStart = 0;
            else if (mReceiveStart > 0 && (mReceiveStart + mReceiveLength) >= mReceiveBuffer.Length)
            {
                Buffer.BlockCopy(mReceiveBuffer, mReceiveStart, mReceiveBuffer, 0, mReceiveLength);
                mReceiveStart = 0;
            }
            if (mReceiveLength == mReceiveBuffer.Length)
            {
                Log.WriteLine(ELogLevel.Error, "[{0}] Receive Overflow", Host);
                Disconnect();
            }
            else BeginReceive();
        }
コード例 #18
0
ファイル: Client.cs プロジェクト: superraz375/RazChat
 internal static void updateUsername(string pUsername)
 {
     Packet packet = new Packet (EOpcode.CMSG_UPDATE_USERNAME);
     packet.WriteString (pUsername);
     sServer.SendPacket (packet);
 }
コード例 #19
0
ファイル: Server.cs プロジェクト: superraz375/RazChat
        internal static void UpdateUsername(Client pClient, string pUsername)
        {
            bool success = true;
            if (sClients.Any (c => c.Username.Equals (pUsername, StringComparison.CurrentCulture))) {
                success = false;
            }

            Packet packet = new Packet(EOpcode.SMSG_UPDATE_USERNAME);
            packet.WriteBool (success);

            if (success) {
                packet.WriteString (pUsername);
                pClient.Username = pUsername;
            }

            Log.WriteLine (ELogLevel.Info, "Sending Uusername: {0}", pUsername);

            pClient.SendPacket (packet);
        }
コード例 #20
0
ファイル: Server.cs プロジェクト: superraz375/RazChat
 internal static void SendPacketToAll(Packet pPacket)
 {
     sClients.ForEach(p => p.SendPacket(pPacket));
 }
コード例 #21
0
ファイル: Server.cs プロジェクト: superraz375/RazChat
 internal static void SendPacketToAllExcept(Packet pPacket, Client pExcept)
 {
     sClients.ForEach(p => { if (p != pExcept) p.SendPacket(pPacket); });
 }
コード例 #22
0
ファイル: Server.cs プロジェクト: superraz375/RazChat
 internal static void SendWelcomeMessage(Client pClient)
 {
     Packet packet = new Packet(EOpcode.SMSG_WELCOME_MESSAGE);
     packet.WriteString (Config.Instance.WelcomeMessage);
     pClient.SendPacket (packet);
 }