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(); } }
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(); }
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(); } }
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(); }