public void StartHall() { VW.Ayvi ayvi = new VW.Ayvi(); VI = ayvi; VI.Init(); VI.SetInGame(false); TcpClient client = new TcpClient(server, port); NetworkStream tcpStream = client.GetStream(); int version = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.Revision; string trainerjoin = (this.trainer != null && trainer.Length > 0) ? ("," + string.Join(",", trainer)) : ""; Base.VW.WHelper.SentByteLine(tcpStream, "C0CO," + name + "," + avatar + "," + teamCode + "," + selCode + "," + levelCode + "," + version + trainerjoin); Thread msgThread = new Thread(delegate() { try { //string readLine = Console.ReadLine(); string readLine = VI.RequestTalk(uid); while (readLine != null) { lock (tcpStream) Base.VW.WHelper.SentByteLine(tcpStream, "C0TK," + uid + "," + readLine); readLine = VI.RequestTalk(uid); //readLine = Console.ReadLine(); } } catch (System.IO.IOException) { } }); bool done = false; while (!done) { string line = Base.VW.WHelper.ReadByteLine(tcpStream); if (line.StartsWith("G0XV,")) { string expectVersion = line.Substring("C0XV,".Length); VI.Cout(uid, "Version Missmatch. Expect " + expectVersion + ", please get updated.", uid); } else if (line.StartsWith("C0CN,")) { uid = ushort.Parse(line.Substring("C1CO,".Length)); VI.Cout(uid, "Allocated with uid {0}", uid); } else if (line.StartsWith("C1RM,")) { string[] splits = line.Split(','); room = int.Parse(splits[1]); for (int i = 2; i < splits.Length; i += 3) roomMates.Add(new IchiPlayer() { Uid = ushort.Parse(splits[i]), Name = splits[i + 1], Avatar = int.Parse(splits[i + 2]) }); if (roomMates.Count > 0) VI.Cout(uid, "您进入{0}#房间,其它成员为:{1}", room, string.Join(",", roomMates.Select(p => "[" + p.Uid + "]" + p.Name))); else VI.Cout(uid, "您进入{0}#房间并成为房主。", room); msgThread.Start(); } else if (line.StartsWith("C1NW,")) { string[] splits = line.Split(','); IchiPlayer ip = new IchiPlayer() { Uid = ushort.Parse(splits[1]), Name = splits[2], Avatar = int.Parse(splits[3]) }; roomMates.Add(ip); VI.Cout(uid, "新成员{0}加入房间{1}#。", "[" + ip.Uid + "]" + ip.Name, room); } else if (line.StartsWith("C1LV,")) { ushort ut = ushort.Parse(line.Substring("C1LV,".Length)); foreach (IchiPlayer ip in roomMates) { if (ip.Uid == ut) { roomMates.Remove(ip); VI.Cout(uid, "{0}离开房间。", "[" + ip.Uid + "]" + ip.Name); break; } } } else if (line.StartsWith("C1SA,")) { Base.VW.WHelper.SentByteLine(tcpStream, "C1ST," + uid); Console.WriteLine("Start XIClient"); //VI.Init(); VI.SetInGame(true); XIClient xic = new XIClient(uid, name, teamCode, VI, server, room, record, msglog, false); xic.RunAsync(); //client.Close(); done = true; } else if (line.StartsWith("C1TK,")) // Talk case { int idx = line.IndexOf(',', "C1TK,".Length); string nick = Algo.Substring(line, "C1TK,".Length, idx); string content = Algo.Substring(line, idx + 1, -1); VI.Chat(content, nick); } } if (msgThread != null && msgThread.IsAlive) msgThread.Abort(); }
public void ResumeHall() { VW.Ayvi ayvi = new VW.Ayvi(); VI = ayvi; VI.Init(); VI.SetInGame(false); TcpClient client = new TcpClient(server, port); NetworkStream tcpStream = client.GetStream(); Base.VW.WHelper.SentByteLine(tcpStream, "C4CO," + name + "," + room); bool done = false; while (!done) { string line = Base.VW.WHelper.ReadByteLine(tcpStream); if (line.StartsWith("C4RM,0")) { done = true; Console.WriteLine("Re-connection Rejected."); } else if (line.StartsWith("C4RM,")) // Reconnection case { string[] parts = line.Split(','); ushort centerUid = ushort.Parse(parts[1]); // AUid ushort subUid = ushort.Parse(parts[2]); // Uid int roomNumber = int.Parse(parts[3]); string nick = parts[4]; string passcode = parts[5]; // start new connection... Console.WriteLine("Restart XIClient"); VI.SetInGame(true); XIClient.CreateInResumeHall(centerUid, subUid, name, VI, server, roomNumber, passcode, record, msglog).RunAsync(); done = true; } } }