コード例 #1
0
        public void SendMessage(int Channel, byte[] data, SharpClient client)
        {
            SharpSerializer ser = SharpSerializer.Create();

            ser.Write((byte)SharpConnectionMessages.DirectData);

            ser.Write((short)0);
            ser.Write(Channel);
            ser.Write(data.Length);
            ser.Write(data);

            if (client.isMine)
            {
                S_OnReceivedData(serverclient, Channel, data);
            }
            else
            {
                client.SendMessage(ser.DataAndPost());
            }

            if (ser.inUse)
            {
                ser.Post();
            }
        }
コード例 #2
0
        void C_OnReceivedMessage(byte[] rawMessage)
        {
            SharpSerializer         ser          = SharpSerializer.Create(rawMessage);
            SharpConnectionMessages incomingType = (SharpConnectionMessages)ser.ReadByte();

            if (incomingType == SharpConnectionMessages.ClientConnected)
            {
                SharpClient incomingClient = new SharpClient(ref ser);
                this.room.AssignClient(incomingClient);
                C_OnClientConnected(incomingClient);
            }
            else if (incomingType == SharpConnectionMessages.ClientDisconnected)
            {
                short netID = ser.ReadInt16();
                C_OnClientDisconnected(this.room.Get(netID));
            }
            else if (incomingType == SharpConnectionMessages.DirectData)
            {
                short  sender      = ser.ReadShort();
                int    channel     = ser.ReadInt32();
                int    packageSize = ser.ReadInt32();
                byte[] rawData     = ser.ReadBytes(packageSize);
                C_OnReceivedData(this.room.Get(sender), channel, rawData);
            }

            ser.Post();
        }
コード例 #3
0
        public void SendMessage(int Channel, byte[] data, SharpTargets targets)
        {
            SharpSerializer ser = SharpSerializer.Create();

            ser.Write((byte)SharpConnectionMessages.DirectData);

            ser.Write((short)0);
            ser.Write(Channel);
            ser.Write(data.Length);
            ser.Write(data);

            if (targets == SharpTargets.All)
            {
                Broadcast(ser.DataAndPost(), null);
                S_OnReceivedData(serverclient, Channel, data);
            }
            else if (targets == SharpTargets.ClientsOnly)
            {
                Broadcast(ser.DataAndPost(), null);
            }
            else if (targets == SharpTargets.OtherClientsOnly)
            {
                Broadcast(ser.DataAndPost(), null);
            }
            else if (targets == SharpTargets.Others)
            {
                Broadcast(ser.DataAndPost(), null);
            }
            else if (targets == SharpTargets.Server)
            {
                S_OnReceivedData(serverclient, Channel, data);
            }

            if (ser.inUse)
            {
                ser.Post();
            }
        }
コード例 #4
0
        void HandleIncomingConnection(TcpClient client)
        {
            Stopwatch timeout = Stopwatch.StartNew();


            LockableBool isdone = new LockableBool();

            byte[] output = TCPMessageHandler.Read(client);
            //LockableObject<byte[]> output = null;
            //Thread thread;

            //TCPMessageHandler.Read(client, isdone, output, out thread);

            //while (!isdone)
            //{
            //    Thread.Sleep(1);
            //    if (timeout.ElapsedMilliseconds > this.timeout)
            //    {
            //        try { thread.Abort(); thread = null; } catch { }
            //        TCPMessageHandler.CloseConnection(client);
            //        return;
            //    }
            //}
            SharpSerializer package = SharpSerializer.Create(output);

            try
            {
                HandleIncomingConnectionRequest(package, client);
            }
            catch (Exception e)
            {
                TCPMessageHandler.CloseConnection(client);
            }

            package.Post();
        }